2008届计算机科学与技术专业毕业设计(论文)
}
if(cgray>255) { }
m_tResPixelArray[i][j].rgbBlue
=
m_tResPixelArray[i][j].rgbGreen
=
cgray=255; cgray=0;
m_tResPixelArray[i][j].rgbRed =cgray;
}
} }
MakeBitMap();
//重置位图
{
MakeBitMap();的主要代码
CClientDC ClientDC(pDCShow->GetWindow());
for(int i=0; i 19 if(m_pResMap!=NULL) delete m_pResMap; m_pResMap=new CBitmap(); m_pResMap->CreateCompatibleBitmap(&ClientDC,m_nWndWidth,m_nWndHeight); CDC dc; dc.CreateCompatibleDC(&ClientDC); dc.SelectObject(m_pResMap); 初春岭:人脸面部特征提取技术的研究 dc.SetPixelV(j,i,RGB(m_tResPixelArray[i][j].rgbRed,m_tResPixelArray[i][j].rgbGreen, m_tResPixelArray[i][j].rgbBlue)); } MyDraw(); dc.DeleteDC(); (2) 效果图 图4-3 比较柔和的灰度图像 20 2008届计算机科学与技术专业毕业设计(论文) 图4-4 灰度较强图像 4.2.3 sobel边缘提取 图像边缘:是指图像中象素灰度值有阶跃变化或屋顶状变化的那些象素的集合。图像边缘是一种重要的视觉信息,图像边缘检测是图像处理、图像分析、模式识别、计算机视觉以及人类视觉的基本步骤。其结果的正确性和可靠性将直接影响到机器视觉系统对客观世界的理解。实现边缘检测有很多不同的方法,也一直是图像处理中的研究热点,人们期望找到一种抗噪强、定位准、不漏检、不误检的检测算法。经典的算法[1-2]中主要用梯度算子,最简单的梯度算子是Roberts算子,比较常用的有Prewitt算子和Sobel算子,其中Sobel算子效果较好。 21 初春岭:人脸面部特征提取技术的研究 (1) 算法思想 Sobel边缘检测算子使用两个如下有向算子(一个水平的,一个是垂直的),每一个逼近一个偏导数: Dxf(x,y)?{f(x?1,y?1)?2f(x?1,y)?f(x?1,y?1)}?{f(x?1,y?1)?2f(x?1,y)?f(x?1,y?1)}Dyf(x,y)?{f(x?1,y?1)?2f(x,y?1)?f(x?1,y?1)}?{f(x?1,y?1)?2f(x,y?1)?f(x?1,y?1)}Df(x,y)?DXf(x,y)2?Dyf(x,y) 式(4.6) 然后将Df(x,y)的值赋给待求点的灰度值。 (2) 具体实现Sobel功能 首先对整张图片的像素点进行扫描,得到每个像素点的R , G , B ,然后计算得到这个像素点的灰度值, // // // -1 0 1 -2 0 2 -1 0 1 col=temp6 + 2 * temp7 + temp8 - temp1 - 2 * temp2 - temp3; 式(4.7) // // // -1 -2 1 0 0 0 1 2 1 22 2008届计算机科学与技术专业毕业设计(论文) row=temp3 + 2 * temp5 + temp8 - temp1 - 2 * temp4 - temp6; 式(4.8) temp=method3->CalSobel(col,row); 式(4.9) //重置像素 m_tResPixelArray[i][j].rgbBlue = m_tResPixelArray[i][j].rgbGreen = //对计算的值进行限制 if (temp<0) { } if(temp>255) { } temp=255; temp=0; m_tResPixelArray[i][j].rgbRed =temp; } } MakeBitMap(); } { CClientDC ClientDC(pDCShow->GetWindow()); if(m_pResMap!=NULL) delete m_pResMap; m_pResMap=new CBitmap(); m_pResMap->CreateCompatibleBitmap(&ClientDC,m_nWndWidth,m_nWndHeight); CDC dc; dc.CreateCompatibleDC(&ClientDC); 23