图像的邻域处理_第1页
图像的邻域处理_第2页
图像的邻域处理_第3页
图像的邻域处理_第4页
图像的邻域处理_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1图像的邻域处理

27.1邻点与邻域处理4邻点当前像素的上、下、左、右4点称为它的4邻点8邻点4邻点再加上当前像素对角线方向上的4个邻点总共8个点称为8邻点邻域处理输出的像素值由包含当前像素的一个邻域中的几个像素的像素值决定一般采用奇数行和奇数列的矩形来构成邻域,如3×3与5×5邻域**C****C**4邻点8邻点37.1.2图像卷积运算卷积后图像中(x,y)处的像素g(x,y)是原图像(x,y)处的像素f(x,y)的一个邻域Ω中像素值根据某种卷积算子模板的线性组合010111010五点平均算子卷积模板Mask原图像f卷积后图像gg(x,y)f(x,y)4图像卷积计算过程010111010*0*1*0*1*1*1*0*1*0352247215231335222335222447211552311552311*0*1*0*1*1*1*0*1*0131822972320157211911卷积模板矩阵Mask输入图像扩展行列后的输入图像f扩展行列后的输出图像g*0*1*0*1*1*1*0*1*0*0*1*0*1*1*1*0*1*05图像处理中卷积的特点邻域Ω中像素对输出值的贡献用二维卷积模板矩阵Mask[][]来加权在实际进行卷积运算时还要进行以下三个处理:⑴引入衰减因子⑵计算结果需作范围检查计算结果往往会超出此范围。要限制在0~255之间。⑶边框像素的处理可将边界行(或列)复制到外面所缺的行(或列),补齐数据后再进行运算。Program第七章图象邻域处理.cpp-Convolution()335222335222447211552311552311*0*1*0*1*1*1*0*1*06voidConvolution(CImage*pDestImage,CImage*pSourceImage,charOP[5][5],int

Scale,int

Offset,int

nOPWidth,int

nOPHeight){

int

nLine,nCol,l,c,nWidth,nHeight,nNewPixel;

CopyImage(pDestImage,pSourceImage);

nWidth=pSourceImage->GetWidth(); nHeight=pSourceImage->GetHeight(); for(nLine=nOPHeight/2;nLine<nHeight-nOPHeight/2;nLine++){ for(nCol=nOPWidth/2;nCol<nWidth-nOPWidth/2;nCol++){

nNewPixel=0;

for(l=0;l<nOPHeight;l++)//卷积计算

for(c=0;c<nOPWidth;c++)

nNewPixel+=OP[l][c]*GetPixelValue(pSourceImage,nLine-nOPHeight/2+l,nCol-nOPWidth/2+c);

nNewPixel=nNewPixel/Scale+Offset;if(nNewPixel>0xff)//计算结果的范围检查

nNewPixel=0xff; else if(nNewPixel<0)

nNewPixel=0;

SetPixelValueInIndexImage(pDestImage,nLine,nCol,(BYTE)nNewPixel);//结果送入输出图象

}}}7图像镶嵌边框与去除边框图像加边在图像上下方向各扩展一行,在左右方向各扩展一列,即复制相邻的行与列Program第七章图象邻域处理.cpp-AddImageBorder()图像去边在图像上下方向各去除一行,在左右方向各去除一列Program第七章图象邻域处理.cpp-SubtractImageBorder()352247215231335222335222447211552311552311图像加边图像去边87.2图像平滑去除图像中的噪声的运算在图像处理中称为图像平滑图像平滑常用的方法有邻域平均中值滤波等方法

97.2.2图像平滑-邻域平均法将每个像素的灰度值用它所在邻域内像素的平均值来代替优点是算法简单,缺点是会造成图像中物体边缘的模糊常用的邻域平均的窗口有3×3邻域中的十字邻域方形邻域3点邻域,3点邻域可消除视频图像中常见的水平条纹干扰模板内各因子之和除以相应的衰减因子的结果为1335222335222447211552311552311*0*1*0*1*1*1*0*1*0010111010111111111010010010十字邻域方形邻域3点邻域10图像平滑-平滑模板法演示程序:邻域处理/图像平滑:五点平均Program第七章图象邻域处理.cpp-OnSmoothByAverage5()(作业)开发“邻域处理/图像平滑:九点平均”程序(作业)开发“邻域处理/Embossment算子”程序010111110五点平均卷积模板矩阵Mask111111111九点平均卷积模板矩阵Mask200000002Embossment算子卷积模板矩阵Mask11voidCImageView::OnSmoothByAverage5(){ CClientDC

dc(this);

CImage Image1,Image2,Image3;

int

nStartX,nStartY,nWidth,nHeight;

if(!WorkCanvus.IsNull()){

nStartX=0; nStartY=0;

nWidth=WorkCanvus.GetWidth(); nHeight=WorkCanvus.GetHeight();

DrawWorkCanvus(&dc,nStartX,nStartY);

SetOPOfAverage5(OP); AddImageBorder(&Image1,&WorkCanvus); Convolution(&Image2,&Image1,OP,5,0,3,3); SubtractImageBorder(&Image3,&Image2);

nStartX+=WorkCanvus.GetWidth()+20; Image3.BitBlt(dc,nStartX,nStartY,nWidth,nHeight,0,0,SRCCOPY); }}voidSetOPOfAverage5(charOP[5][5]){ OP[0][0]=0;OP[0][1]=1;OP[0][2]=0; OP[1][0]=1;OP[1][1]=1;OP[1][2]=1; OP[2][0]=0;OP[2][1]=1;OP[2][2]=0;}010111110五点平均卷积模板矩阵Mask12五点平均137.2.3中值滤波中值是指将窗口中奇数个数据按大小顺序排序后处于中间位置的那个数中值滤波是指将窗口里的中值作为新图象的像素111111111352247215231352472523222334557窗口中奇数个数据排序后的窗口中奇数个数据3522721231112222357窗口中奇数个数据排序后的窗口中奇数个数据2输入图像窗口14中值滤波特点对于一些细节多,特别是点、线、尖顶细节多的图像不宜采用中值滤波常用的几种采样窗口演示程序:邻域处理/图像平滑:五点中值滤波Program第七章图象邻域处理.cpp-OnFilterByMiddle5()(留作作业)邻域处理/图像平滑:九点中值滤波Program第七章图象邻域处理.cpp-OnFilterByMiddle9()15voidFilterImageByMiddle5(CImage*pNewImage,CImage*pImage){

int

i,j,nWidth,nHeight; BYTE Window[20],cNewPixel;

nWidth=pImage->GetWidth(); nHeight=pImage->GetHeight();

pNewImage->Create(nWidth,nHeight,pImage->GetBPP());

CopyColorTables(pNewImage,pImage); for(i=1;i<nHeight-1;i++) { for(j=1;j<nWidth-1;j++) { Window[0]=(BYTE)GetPixelValue(pImage,i-1,j); Window[1]=(BYTE)GetPixelValue(pImage,i,j); Window[2]=(BYTE)GetPixelValue(pImage,i+1,j); Window[3]=(BYTE)GetPixelValue(pImage,i,j-1); Window[4]=(BYTE)GetPixelValue(pImage,i,j+1);

cNewPixel=GetMiddleBySort(Window,5,2);

SetPixelValueInIndexImage(pNewImage,i,j,cNewPixel); } }}16五点中值滤波177.3一阶微分边缘检测图像上的边缘反映为相邻像素间灰度值的跃变。边缘检测可借助微分算法通过卷积运算来实现。对于数字图像而言,求微分实际上求的是差分。有两种主要类型的微分边缘检测,即一阶与二阶微分:一阶微分运算所得边缘梯度与阈值进行比较。如果边缘梯度超过阈值,则该边缘就被设定为当前边缘二阶微分如果边缘的二阶微分的极性有显著的变化,则该边缘设定为当前边缘18一阶微分边缘检测算子有的是生成水平方向和垂直方向的梯度,然后取它们之和或取其中较大值作结果,如梯度法、Roberts梯度、Sobel算子算法。通常使用其幅值计算有的则利用8个不同的模板,检测不同方向的梯度,如Kirsch、Robinson和Prewitt算法。通常使用其方向计算19梯度法(水平垂直梯度)▽g(x,y)=|Gx|+|Gy|Gx与Gy分别为水平梯度与垂直梯度水平方向与垂直方向的梯度之和nNewPixel=abs(cPixel[1][2]-cPixel[1][1])+abs(cPixel[2][1]-cPixel[1][1]);演示程序:邻域处理/一阶边缘检测:梯度法Program第七章图象邻域处理.cpp-OnEdgeDetectByGradientOperator()01201-1121345362335222447211452311562131122482122482041020124142156213120voidEdgeDetectByGradientOP(CImage*pNewImage,CImage*pImage,int

nScale){

int

i,j,nWidth,nHeight,nNewPixel; BYTE cPixel[3][3];

CopyImage(pNewImage,pImage);

nWidth=pImage->GetWidth(); nHeight=pImage->GetHeight(); for(i=1;i<nHeight-1;i++) { for(j=1;j<nWidth-1;j++) { cPixel[1][1]=(BYTE)GetPixelValue(pImage,i,j); cPixel[1][2]=(BYTE)GetPixelValue(pImage,i,j+1); cPixel[2][1]=(BYTE)GetPixelValue(pImage,i+1,j);

nNewPixel=abs(cPixel[1][2]-cPixel[1][1])+abs(cPixel[2][1]-cPixel[1][1]);

nNewPixel*=nScale if(nNewPixel>255)

nNewPixel=255;

SetPixelValueInIndexImage(pNewImage,i,j,(BYTE)nNewPixel); } }}21梯度法原图22Roberts算法(交叉差分)nNewPixel=abs(cPixel[2][2]-cPixel[1][1])+abs(cPixel[2][1]-cPixel[1][2]);演示程序:邻域处理/一阶边缘检测:Roberts算法Program第七章图象邻域处理.cpp-OnEdgeDetectByRobertsOperator()01201-1121134536233522244721145231156213113554225812214430127202156213123梯度法原图Roberts法24Sobel算法检测到的边缘较其他算法平滑、光洁。x1=abs((cPixel[0][2]+2*(int)cPixel[1][2]+(int)cPixel[2][2])-(cPixel[0][0]+2*(int)cPixel[1][0]+cPixel[2][0]));x2=abs((cPixel[2][0]+2*(int)cPixel[2][1]+(int)cPixel[2][2])-(cPixel[0][0]+2*(int)cPixel[0][1]+cPixel[0][2]));两种计算方法:取水平差分与垂直差分中的较大者nNewPixel=x1>x2?x1:x2;取两种差分之和nNewPixel=(int)sqrt((double)(x1*x1+x2*x2));演示程序:邻域处理/一阶边缘检测:Sobel算法Program第七章图象邻域处理.cpp-OnEdgeDetectBySobelSumOperator()0120-111-112-110120-1-1-112111x1x225梯度法原图Roberts法Sobel法(和)Sobel法(较大者)267.4二阶微分边缘检测算子二阶微分边缘检测的原理:(a)表示一个灰度的跃变(b)为其一阶微分(c)为其二阶微分(d)为原图像与其二阶微分之差(b)图波形的顶点与(c)图波形中间下降段的过零点可作为两个灰度间的分界点,前者是灰阶边缘单点化的依据,后者是二阶导数过零点检测边缘的依据从(d)图可知,由于斜坡的间距减小、幅度增大,两个灰度级之间的过渡线比(a)中更陡,起到了尖锐化的作用。同时,两侧的过冲又能起到勾边作用,即在暗区边缘处出现一条更黑的黑线,在明区边缘处出现一条更白的白线。在锐化与勾边双重作用下图像的边缘得到了增强,使得轮廓分明、对比度更大277.4.1-2Laplacian

算子▽2f(x,y)=△x2f(x,y)+△y2f(x,y)=f(x-1,y)+f(x+1,y)+f(x,y-1)+f(x,y+1)-4f(x,y)0101-410101111-81111-1-1-1-18-1-1-1-14邻点Laplacian算子8邻点Laplacian算子反相8邻点Laplacian算子

28Laplacian

算子Laplacian算子加强了图像中灰度的突变,并降低灰度慢变化的区域,对于细线和孤立点的作用比区域界线要强些。但它的抗干扰能力较弱演示程序:邻域处理/二阶边缘检测:Laplacian算子Program第七章图象邻域处理.cpp-OnEdgeDetectByLaplacianOperator()29voidCImageView::OnEdgeDetectByLaplacianOperator(){

CClientDC

dc(this);

CImage Image1,Image2,Image3;

int

nStartX,nStartY,nWidth,nHeight;

nStartX=0; nStartY=0;

nWidth=WorkCanvus.GetWidth();nHeight=WorkCanvus.GetHeight();

DrawWorkCanvus(&dc,nStartX,nStartY);

SetLaplacianEdgeOP(OP); AddImageBorder(&Image1,&WorkCanvus); Convolution(&Image2,&Image1,OP,1,1,3,3); SubtractImageBorder(&Image3,&Image2);

nStartX+=WorkCanvus.GetWidth()+20; Image3.BitBlt(dc,nStartX,nStartY,nWidth,nHeight,0,0,SRCCOPY);}voidSetLaplacianEdgeOP(charOP[5][5]){ OP[0][0]=1; OP[0][1]=1; OP[0][2]=1; OP[1][0]=1; OP[1][1]=-8; OP[1][2]=1; OP[2][0]=1; OP[2][1]=1; OP[2][2]=1;}30梯度法原图Roberts法Sobel法(和)Sobel法(较大者)Laplacian反相

算子Laplacian算子317.4.1-3Laplacian素描算子由于计算结果不经处理直接用于显示,所得边缘图像中负值部分就丢失了。增加了偏移量254,原来零值部分现在变成了254(白色),正值部分超出范围而被限幅为255,负值部分则移入像素取值范围,且负数绝对值大者结果值较小,即颜色更暗(深)。这时图像中像素值小于254的部分即为暗区边缘(素描)演示程序:邻域处理/二阶边缘检测:Laplacian素描算子Program第七章图象邻域处理.cpp-OnEdgeDetectByGuassLaplacianSketchOperator()32梯度法原图Roberts法Sobel法(和)Sobel法(较大者)Laplacian反相

算子Laplacian算子Laplacian素描33voidCImageView::OnLaplacianCharcoalDrawing(){

CClientDC

dc(this);

CImage Image1,Image2,Image3;

int

nStartX,nStartY,nWidth,nHeight;

nStartX=0; nStartY=0;

nWidth=WorkCanvus.GetWidth(); nHeight=WorkCanvus.GetHeight();

DrawWorkCanvus(&dc,nStartX,nStartY);

SetLaplacianEdgeOP(OP); AddImageBorder(&Image1,&WorkCanvus); Convolution(&Image2,&Image1,OP,1,254,3,3); SubtractImageBorder(&Image3,&Image2);

nStartX+=WorkCanvus.GetWidth()+20; Image3.BitBlt(dc,nStartX,nStartY,nWidth,nHeight,0,0,SRCCOPY);}347.4.3Laplacian边缘增强轮廓分明原图减去它的二阶导数可以锐化边缘g(x,y)=f(x,y)-▽2f(x,y)=f(x,y)-(f(x-1,y)+f(x+1,y)+f(x,y-1)+f(x,y+1)-4f(x,y))=5f(x,y)-f(x+1,y)-f(x-1,y)-f(x,y-1)-f(x,y+1)如果由于强度过大使图像造成失真一般只需叠加一部分即可。为了控制锐化程度,可引入比例因子αg(x,y)=f(x,y)–α▽2f(x,y)演示程序:邻域处理/边缘检测:Laplacian边缘增强Program第七章图象邻域处理.cpp-OnEdgeDetectByLaplacianEnhanceOperator()0-10-14+Scale-10-1035梯度法原图Roberts法Sobel法(和)Sobel法(较大者)Laplacian反相

算子Laplacian算子Laplacian素描Laplacian边缘增强36voidCImageView::OnEdgeDetectByLaplacianEnhanceOperator(){

CClientDC

dc(this);

CImage Image1,Image2,Image3;

int

nStartX,nStartY,nWidth,nHeight,nScale;

nStartX=0; nStartY=0;

nWidth=WorkCanvus.GetWidth(); nHeight=WorkCanvus.GetHeight();

DrawWorkCanvus(&dc,nStartX,nStartY);

nScale=4;

SetLaplacianEdgeEnhanceOP(OP,nScale); AddImageBorder(&Image1,&WorkCanvus); Convolution(&Image2,&Image1,OP,nScale,0,3,3); SubtractImageBorder(&Image3,&Image2);

nStartX+=WorkCanvus.GetWidth()+20; Image3.BitBlt(dc,nStartX,nStartY,nWidth,nHeight,0,0,SRCCOPY);}voidSetLaplacianEdgeEnhanceOP(charOP[5][5],intnScale){ OP[0][0]=0; OP[0][1]=-1; OP[0][2]=0; OP[1][0]=-1; OP[1][1]=4+nScale; OP[1][2]=-1; OP[2][0]=0; OP[2][1]=-1; OP[2][2]=0;}377.4.4高斯型Laplacian边缘检测Laplacian算子对于噪声过于敏感,影响了它的使用效果高斯Laplacian算法通过高斯平滑化

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论