您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 第7章-图像的邻域处理(本科生)
1第7章图像的邻域处理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)的一个邻域Ω中像素值根据某种卷积算子模板的线性组合),(),(),(),(nmnmfnymxMaskyxg010111010五点平均算子卷积模板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],intScale,intOffset,intnOPWidth,intnOPHeight){intnLine,nCol,l,c,nWidth,nHeight,nNewPixel;CopyImage(pDestImage,pSourceImage);nWidth=pSourceImage-GetWidth();nHeight=pSourceImage-GetHeight();for(nLine=nOPHeight/2;nLinenHeight-nOPHeight/2;nLine++){for(nCol=nOPWidth/2;nColnWidth-nOPWidth/2;nCol++){nNewPixel=0;for(l=0;lnOPHeight;l++)//卷积计算for(c=0;cnOPWidth;c++)nNewPixel+=OP[l][c]*GetPixelValue(pSourceImage,nLine-nOPHeight/2+l,nCol-nOPWidth/2+c);nNewPixel=nNewPixel/Scale+Offset;if(nNewPixel0xff)//计算结果的范围检查nNewPixel=0xff;elseif(nNewPixel0)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(){CClientDCdc(this);CImageImage1,Image2,Image3;intnStartX,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()*************************************************************图7-5中值滤波的几种常用窗口15voidFilterImageByMiddle5(CImage*pNewImage,CImage*pImage){inti,j,nWidth,nHeight;BYTEWindow[20],cNewPixel;nWidth=pImage-GetWidth();nHeight=pImage-GetHeight();pNewImage-Create(nWidth,nHeight,pImage-GetBPP());CopyColorTables(pNewImage,pImage);for(i=1;inHeight-1;i++){for(j=1;jnWidth-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,intnScale){inti,j,nWidth,nHeight,nNewPixel;BYTEcPixel[3][3];CopyImage(pNewImage,pImage);nWidth=pImage-GetWidth();nHeight=pImage-GetHeight();for(i=1;inHeight-1;i++){for(j=1;jnWidth-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*=nScaleif(nNewPixel255)nNewPixel=255;SetPixelValueInIndexImage(pNewImage,i
本文标题:第7章-图像的邻域处理(本科生)
链接地址:https://www.777doc.com/doc-1387810 .html