于本成 朱作付
徐州工业职业技术学院 江苏 221000
随着机器视觉在各行业中应用的不断扩大,图形图像处理技术的要求也越来越高,如何提高所得图像更真实的效果与提高图像处理速度,更成为当今一大热题。本文设计了一个算法利用坐标反向对应使图像翻转产生投影效果,然后优化算法利用图像的渐变透明度使所得图片更具真实效果。使得机器视觉技术在图像的真实性方面有了非常大的提高。
本算法主要利用图像翻转和位置变换来产生投影效果,算法有实现简单运算速度快的优点,但同时又有了投影效果不理想的缺点。
本算法设计原理如下:
(1) 创建一个源图对象,一个目标图对象;
(2) 从机器视觉系统采集的图像中选取源图,并装载;
(3) 定义图像的高与宽,并保证目标图与源图的各项数据一致;
(4) 将源图垂直翻转后放置于源图正下方,产生投影效果。
算法实现代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bmpSrc = new Graphics::TBitmap;
Graphics::TBitmap *bmpDst = new Graphics::TBitmap;
try
{
bmpSrc->LoadFromFile("文件所在路径以及文件名称");
int nWidth = bmpSrc->Width;
int nHeight = bmpSrc->Height;
TRect rctSrc(0, 0, nWidth, nHeight);
TRect rctDst(0, nHeight - 1, nWidth, -1);
bmpDst->Width = nWidth;
bmpDst->Height = nHeight;
bmpDst->Canvas->CopyRect(rctDst, bmpSrc->Canvas, rctSrc);
Canvas->Draw(0, 0, bmpSrc);
Canvas->Draw(0, nHeight, bmpDst);
}
__finally
{
delete bmpSrc;
delete bmpDst;
}
}
本算法是在图像翻转产生投影效果算法的基础上分析原算法的优缺点进行了改进与优化,主要利用了图像的渐变透明度产生更为真实的投影效果,算法中的语句double alpha= 255.0 - 255.0*y/nHeight;可以修改透明渐变速度,比如改成double alpha = 255.0 - 500.0*y/nHeight;if(alpha<0) alpha = 0;,以此大大提高了本算法在机器视觉系统实际应用中的灵活性。
在BCB6中无法使用AlphaBlend的解决办法为:
将BCBLIBPSDK中的msimg32.libj加入工程里面。
算法以及注释如下:simg32.libjiaRU
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 源图和目标图两个对象的创建
Graphics::TBitmap *bmpSrc = new Graphics::TBitmap;
Graphics::TBitmap *bmpDst = new Graphics::TBitmap;
try
{
// 从文件中装载位图
bmpSrc->LoadFromFile("文件所在路径以及文件名称");
// 定义图像的宽和高
int nWidth = bmpSrc->Width;
int nHeight = bmpSrc->Height;
// 源图的边框区域
大学生正处于确立自我统一性的阶段,在该阶段内心充满着忐忑不安、矛盾冲突,尤其当他们的现实自我与理想自我无法统一时,会引发焦虑,不断产生负性情绪。手机独有的特点如便于携带、虚拟化、智能化等正好使大学生的心理需要得到满足,成为他们消除负性情绪的最好工具。尤其是具有特质焦虑的大学生,为了脱离负性情绪所带来的困扰,便趋于通过使用手机来转移注意力,从而过分依赖手机。国外研究者表明,缓解不安、忧愁、悲伤等负性情绪是手机成瘾行为的主要目的[18]。
TRect rctSrc(0, 0, nWidth, nHeight);
// 目标图的边框区域
TRect rctDst(0, nHeight - 1, nWidth, -1);
// 目标图和源图的宽一致
bmpDst->Width = nWidth;
// 目标图和源图的高一致
bmpDst->Height = nHeight;
// 垂直翻转
bmpDst->PixelFormat = pf32bit;
// 渐变透明度
for(int y=0; y<nHeight; y++)
{
RGBQUAD* cr =(RGBQUAD*)bmpDst->ScanLine[y];
double alpha = 255.0 - 255.0*y/nHeight;
for(int x=0; x<nWidth; x++)
{
cr[x].rgbReserved = alpha+0.5;
cr[x].rgbBlue *= alpha/255.0;
cr[x].rgbRed *= alpha/255.0;
cr[x].rgbGreen *= alpha/255.0;
}
}
// 将源图绘制在窗体左上方
Canvas->Draw(0, 0, bmpSrc);
// 将目标图绘制在源图下方产生投影效果
BLENDFUNCTION blendfunc={
AC_SRC_OVER,
0,
255,
AC_SRC_ALPHA
};
::AlphaBlend(Canvas->Handle,0, nHeight, nWidth,nHeight, bmpDst->Canvas->Handle,0,0,nWidth,nHeight, blendfunc
);
}
__finally
{
// 清除
delete bmpSrc;
delete bmpDst;
}
}
本文用一个图片为例,展示了上述算法处理后的结果,图片可以任意调换,至于让使用机器视觉系统的工作人员来选择图片只需在上述算法中加入简单的两条语句,该语句不为本算法重点,故不予表现。图片的透明渐变图可以调整,使图像更为清晰。下面图像只为实例(如图1,图2),不为具体应用。
图1 图像投影算法处理过的图片
图2 优化后算法处理后的图片
本文算法实现了机器视觉中图像的投影,在提高程序运行速度的基础上更提高了所得结果图像的真实性,对于机器视觉技术又是一项新的突破。本文算法应用到机器视觉系统的图像采集处理模块中,对于提高机器视觉技术应用的普及率与专门领域的算法优化有了非常大的帮助,并能在其他识别系统中对于图像的真实性检测模块中得以应用。
[1]魏伟波.基于图像的目标自动识别与跟踪技术研究[D].南京理工大学.2006.
[2]邵平,杨路明.旋转 45°矩形窗口的积分图像算法改进及应用[J].计算机应用与软件.2008.
[3]吴成东,樊玉泉,张云洲,刘濛.基于差分投影与优割字符的车牌字符分割[J].东北大学学报(自然科学版).2008.
[4]刘云鹏,李广伟,史泽林.基于黎曼流形的图像投影配准算法[J].自动化学报.2009.
[5]潘吉彦,胡波,张建秋.基于自适应初始搜索点预测的目标跟踪算法[J].系统工程与电子技术.2008.
[6]刘晓妮,卢奕南,杨华民.范静涛基于OpenCV的曲面全景投影算法研究[J].计算机仿真.2011.