导航:首页 > 源码编译 > 图像的膨胀和腐蚀算法

图像的膨胀和腐蚀算法

发布时间:2022-05-31 15:18:50

❶ 图像细化与腐蚀,粗化与膨胀在应用上有什么区别

膨胀和腐蚀
膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的.
① 膨胀
是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的.A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的.我们可以把上式改写为:
结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的.
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0.否则为1
② 腐蚀
对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为1,结果图像的该像素为1.否则为0
腐蚀处理的结果是使原来的二值图像减小一圈.
⑷ 击中(匹配)或击不中变换

❷ opencv的腐蚀用的是什么算法

可以修改下,膨胀腐蚀时用到的kernel.
kernel的形状一般有下面三种:
矩形:
morph_rect
交叉形:
morph_cross
椭圆形:
morph_ellipse
比如:想选用15*15的正方形kernel进行膨胀操作.
可以利用:
mat
element
=
getstructuringelement(morph_rect,
size(15,
15));
dilate(image,
out,
element);
这样的语句来实现。

❸ 图像处理中,膨胀和腐蚀都是组合处理图像的嘛

没有说必须组合使用吧,膨胀腐蚀是两种不同的图像处理效果,可以简单的说成是互逆算法

❹ 灰度形态学中的腐蚀和膨胀到底是怎么定义的

膨胀和腐蚀
膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的.
① 膨胀
是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的.A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的.我们可以把上式改写为:
结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的.
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0.否则为1
② 腐蚀
对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为1,结果图像的该像素为1.否则为0
腐蚀处理的结果是使原来的二值图像减小一圈.
⑷ 击中(匹配)或击不中变换

❺ 数字图像处理里的腐蚀和膨胀到底是指什么

膨胀
定义: D = X ⊕ S = { x,y | Sxy∩X ≠Ф}
意义:当结构元素 S 的原点移动到( x,y)位置,如果 S与物体X有任何一点同时为 1,则新图象上相应点为 1;如果 S与 X完全没有相交,新图象上点为 0。
算法:
用结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做 “或”操作。
如果都为0,结果图像的该像素为0。否则为 1。
S是由B映像的位移与X至少有一个像素相同时B的中心点位置的集合。
膨胀的作用:
用 3x3的结构元素时,使物体的边界沿周边增加一个像素。
把图象周围的背景点合并到物体中。如果两个物体距离比较近,通过膨胀可能连通在一起。
对于填补图象分割后物体中的空洞十分有用
腐蚀
定义: E = X Θ S = { x,y | Sxy⊆X}
意义:当结构元素 S 的原点移动到(x,y)位置,如S 完全包含在 X 中,则新图象上该点为 1,否则为 0。
算法:
用结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做 “与”操作。
如果都为 1,结果图像的该像素为 1。否则为 0。
结果图像E是由S完全包括在X中时S的当前位置的集合
作用:
用 3x3的结构元素时,使物体的边界沿周边减少一个像素。
去掉小于结构元素的物体,选择不同大小的结构元素,可以去掉大小不同的物体。
如果两物体之间有细小的连通,当结构元素足够大时,可以将物体分开。
不同的结构元素,可导致不同的结果。

❻ 图像的腐蚀和膨胀的卷积怎么计算

腐蚀的算法: 用3x3的结构元素,扫描图像的每一个像素 用结构元素与其覆盖的二值图像做“与”操作 如果都为1,结果图像的该像素为1。否则为0。 结果:使二值图像减小一圈 定义:E = B  S = { x,y | SxyB} 膨胀的算法: 用3x3的结..

❼ 数字图像处理 膨胀和腐蚀算法的实现

腐蚀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为1,结果图像的该像素为1。否则为0。
结果:使二值图像减小一圈
定义:E = B  S = { x,y | SxyB}

膨胀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为0,结果图像的该像素为0。否则为1
结果:使二值图像扩大一圈
定义:E = B  S = { x,y | Sxy∩B ≠Ф}

❽ 如何进行数字图像处理中的膨胀和腐蚀计算

腐蚀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为1,结果图像的该像素为1。否则为0。
结果:使二值图像减小一圈
定义:E = B  S = { x,y | SxyB}

膨胀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为0,结果图像的该像素为0。否则为1
结果:使二值图像扩大一圈
定义:E = B  S = { x,y | Sxy∩B ≠Ф}

膨胀源码

BOOL Dilation(HWND hWnd,BOOL Hori)

{

DWORD OffBits,BufSize;

LPBITMAPINFOHEADER lpImgData;

LPSTR lpPtr;

HLOCAL hTempImgData;

LPBITMAPINFOHEADER lpTempImgData;

LPSTR lpTempPtr;

HDC hDc;

HFILE hf;

LONG x,y;

unsigned char num;

int i;

//为了处理的方便,仍采用256级灰度图,不过只调色板中0和255两项

if( NumColors!=256){

MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",

"Error Message",MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);

//BufSize为缓冲区大小

BufSize=OffBits+bi.biHeight*LineBytes;

//为新的缓冲区分配内存

if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)

{

MessageBox(hWnd,"Error alloc memory!","Error Message",

MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);

lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);

//拷贝头信息和位图数据

memcpy(lpTempImgData,lpImgData,BufSize);

if(Hori)

{

//在水平方向进行膨胀运算

for(y=0;y<bi.biHeight;y++){

//lpPtr指向原图数据,lpTempPtr指向新图数据

lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;

lpTempPtr=(char*)lpTempImgData+

(BufSize-LineBytes-y*LineBytes)+1;

for(x=1;x<bi.biWidth-1;x++){

//注意为防止越界,x的范围从1到宽度-2

num=(unsigned char)*lpPtr;

//原图中是黑点的,新图中肯定也是,所以要考虑的是那些原图

//中的白点,看是否有可能膨胀成黑点

if (num==255){

*lpTempPtr=(unsigned char)255; //先置成白点

for(i=0;i<3;i++){

num=(unsigned char)*(lpPtr+i-1);

//只要左右邻居中有一个是黑点,就膨胀成黑点

if(num==0){

*lpTempPtr=(unsigned char)0;

break;

}

}

}

//原图中就是黑点的,新图中仍是黑点

else *lpTempPtr=(unsigned char)0;

//指向下一个象素

lpPtr++;

lpTempPtr++;

}

}

}

else{

//在垂直方向进行腐蚀运算

for(y=1;y<bi.biHeight-1;y++){ //注意为防止越界,y的范围从1到高度-2

lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);

lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);

for(x=0;x<bi.biWidth;x++){

num=(unsigned char)*lpPtr;

if (num==255){

*lpTempPtr=(unsigned char)255;

for(i=0;i<3;i++){

num=(unsigned char)*(lpPtr+(i-1)*LineBytes);

//只要上下邻居中有一个是黑点,就膨胀成黑点

if(num==0){

*lpTempPtr=(unsigned char)0;

break;

}

}

}

else *lpTempPtr=(unsigned char)0;

lpPtr++;

lpTempPtr++;

}

}

}

if(hBitmap!=NULL)

DeleteObject(hBitmap);

hDc=GetDC(hWnd);

//产生新的位图

hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,

(LONG)CBM_INIT,

(LPSTR)lpTempImgData+

sizeof(BITMAPINFOHEADER)+

NumColors*sizeof(RGBQUAD),

(LPBITMAPINFO)lpTempImgData,

DIB_RGB_COLORS);

//起不同的结果文件名

if(Hori)

hf=_lcreat("c:\\hdilation.bmp",0);

else

hf=_lcreat("c:\\vdilation.bmp",0);

_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));

_lwrite(hf,(LPSTR)lpTempImgData,BufSize);

_lclose(hf);

//释放内存及资源

ReleaseDC(hWnd,hDc);

LocalUnlock(hTempImgData);

LocalFree(hTempImgData);

GlobalUnlock(hImgData);

return TRUE;

}

腐蚀源码

BOOL Erosion(HWND hWnd,BOOL Hori)

{

DWORD OffBits,BufSize;

LPBITMAPINFOHEADER lpImgData;

LPSTR lpPtr;

HLOCAL hTempImgData;

LPBITMAPINFOHEADER lpTempImgData;

LPSTR lpTempPtr;

HDC hDc;

HFILE hf;

LONG x,y;

unsigned char num;

int i;

//为了处理方便,仍采用256级灰度图,不过只用调色板中0和255两项

if( NumColors!=256){

MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",

"Error Message",MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);

//BufSize为缓冲区大小

BufSize=OffBits+bi.biHeight*LineBytes;

//为新的缓冲区分配内存

if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)

{

MessageBox(hWnd,"Error alloc memory!","Error Message",

MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);

lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);

//拷贝头信息和位图数据

memcpy(lpTempImgData,lpImgData,BufSize);

if(Hori)

{

//在水平方向进行腐蚀运算

for(y=0;y<bi.biHeight;y++){

//lpPtr指向原图数据,lpTempPtr指向新图数据

lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;

lpTempPtr=(char*)lpTempImgData+

(BufSize-LineBytes-y*LineBytes)+1;

for(x=1;x<bi.biWidth-1;x++){

//注意为防止越界,x的范围从1到宽度-2

num=(unsigned char)*lpPtr;

if (num==0){ //因为腐蚀掉的是黑点,所以只对黑点处理

*lpTempPtr=(unsigned char)0; //先置成黑点

for(i=0;i<3;i++){

num=(unsigned char)*(lpPtr+i-1);

if(num==255){

//自身及上下邻居中若有一个不是黑点,则将该点腐

//蚀成白点

*lpTempPtr=(unsigned char)255;

break;

}

}

}

//原图中就是白点的,新图中仍是白点

else *lpTempPtr=(unsigned char)255;

//指向下一个象素

lpPtr++;

lpTempPtr++;

}

}

}

else{

//在垂直方向进行腐蚀运算

for(y=1;y<bi.biHeight-1;y++){ //注意为防止越界,y的范围从1到高度-2

//lpPtr指向原图数据,lpTempPtr指向新图数据

lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);

lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);

for(x=0;x<bi.biWidth;x++){

num=(unsigned char)*lpPtr;

if (num==0){ //因为腐蚀掉的是黑点,所以只对黑点处理

*lpTempPtr=(unsigned char)0; //先置成黑点

for(i=0;i<3;i++){

num=(unsigned char)*(lpPtr+(i-1)*LineBytes);

if(num==255){

//自身及上下邻居中若有一个不是黑点,则将该点腐

//蚀成白点

*lpTempPtr=(unsigned char)255;

break;

}

}

}

//原图中就是白点的,新图中仍是白点

else *lpTempPtr=(unsigned char)255;

//指向下一个象素

lpPtr++;

lpTempPtr++;

}

}

}

if(hBitmap!=NULL)

DeleteObject(hBitmap);

hDc=GetDC(hWnd);

//产生新的位图

hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,

(LONG)CBM_INIT,

(LPSTR)lpTempImgData+

sizeof(BITMAPINFOHEADER)+

NumColors*sizeof(RGBQUAD),

(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);

//起不同的结果文件名

if(Hori)

hf=_lcreat("c:\\herosion.bmp",0);

else

hf=_lcreat("c:\\verosion.bmp",0);

_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));

_lwrite(hf,(LPSTR)lpTempImgData,BufSize);

_lclose(hf);

//释放内存及资源

ReleaseDC(hWnd,hDc);

LocalUnlock(hTempImgData);

LocalFree(hTempImgData);

GlobalUnlock(hImgData);

return TRUE;

}

❾ 图像处理中的腐蚀与膨胀是什么意思

图像处理分为多种,对于不同的图像腐蚀和膨胀的定义不同。

1、形态学图像处理是在图像中移动一个结构元素,然后将结构元素与下面的二值图像进行交、并等集合运算;先腐蚀后膨胀的过程称为开运算。

它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。先膨胀后腐蚀的过程称为闭运算。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。

2、对灰度图像的膨胀(或腐蚀)操作有两类效果:

(1)如果结构元素的值都为正的,则输出图像会比输入图像亮(或暗);

(2)根据输入图像中暗(或亮)细节的灰度值以及它们的形状相对于结构元素的关系,它们在运算中或被消减或被除掉。

腐蚀就是使用算法,将图像的边缘腐蚀掉。作用就是将目标的边缘的“毛刺”踢除掉。

膨胀就是使用算法,将图像的边缘扩大些。作用就是将目标的边缘或者是内部的坑填掉。

使用相同次数的腐蚀与膨胀,可以使目标表面更平滑。

(9)图像的膨胀和腐蚀算法扩展阅读:

1、图像变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理。

目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。

2、图像编码压缩:图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。

压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。

3、图像增强和复原:图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。

如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像

参考资料来源:网络-图像处理

❿ 数字图像处理中的膨胀原理是怎样的

1.图像细化的基本原理
⑴ 图像形态学处理的概念
数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像。
在二值图像中,所有黑色像素的集合是图像完整的形态学描述,二值图像的各个分量是Z2的元素。假定二值图像A和形态学处理的结构元素B是定义在笛卡儿网格上的集合,网格中值为1的点是集合的元素,当结构元素的原点移到点(x,y)时,记为Sxy,为简单起见,结构元素为3x3,且全都为1,在这种限制下,决定输出结果的是逻辑运算。

⑵ 二值图像的逻辑运算
逻辑运算尽管本质上很简单,但对于实现以形态学为基础额图像处理算法是一种有力的补充手段。在图像处理中用到的主要逻辑运算是:与、或和非(求补),它们可以互相组合形成其他逻辑运算。

⑶ 膨胀和腐蚀
膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。
① 膨胀
是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的。A被B膨胀是所有位移z的集合,这样, 和A至少有一个元素是重叠的。我们可以把上式改写为:
结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的。
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0。否则为1

② 腐蚀
对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为1,结果图像的该像素为1。否则为0
腐蚀处理的结果是使原来的二值图像减小一圈。

⑷ 击中(匹配)或击不中变换
假设集合A是由3个子集X,Y和Z组成的集合,击中(匹配)的目的是要在A中找到X的位置,我们设X被包围在一个小窗口W中,与W有关的X的局部背景定义为集合的差(W-X),则X在A内能得到精确拟合位置集合是由X对A的腐蚀后由(W-X)对A的补集Ac腐蚀的交集,这个交集就是我们要找的位置,我们用集合B来表示由X和X的背景构成的集合,我们可以令B=(B1,B2),这里B1=X,B2=(W-X),则在A中对B进行匹配可以表示为:
A⊙B
我们称为形态学上的击中或击不中变换。

⑸ 细化
图像细化一般作为一种图像预处理技术出现,目的是提取源图像的骨架,即是将原图像中线条宽度大于1个像素的线条细化成只有一个像素宽,形成“骨架”,形成骨架后能比较容易的分析图像,如提取图像的特征。
细化基本思想是“层层剥夺”,即从线条边缘开始一层一层向里剥夺,直到线条剩下一个像素的为止。图像细化大大地压缩了原始图像地数据量,并保持其形状的基本拓扑结构不变,从而为文字识别中的特征抽取等应用奠定了基础。细化算法应满足以下条件:
① 将条形区域变成一条薄线;
② 薄线应位与原条形区域的中心;
③ 薄线应保持原图像的拓扑特性。
细化分成串行细化和并行细化,串行细化即是一边检测满足细化条件的点,一边删除细化点;并行细化即是检测细化点的时候不进行点的删除只进行标记,而在检测完整幅图像后一次性去除要细化的点。
常用的图像细化算法有hilditch算法,pavlidis算法和rosenfeld算法等。
注:进行细化算法前要先对图像进行二值化,即图像中只包含“黑”和“白”两种颜色。

还可以参考:http://blog.csdn.net/sunny3106/archive/2007/08/15/1745485.aspx
关键词是 数学形态学,

阅读全文

与图像的膨胀和腐蚀算法相关的资料

热点内容
程序员16k测试 浏览:541
新人程序员如何定计划 浏览:505
毕业设计单片机仿真 浏览:835
阿里ai云服务器 浏览:433
小程序云服务器可以绑个人账户吗 浏览:727
王者荣耀体验服ios怎么登陆安卓的 浏览:285
客户想要的与程序员理解的 浏览:669
硅谷一普通程序员的一天 浏览:456
算法实现两个集合合并 浏览:74
班长命令什么意思 浏览:139
51单片机c语音 浏览:733
悦翔v3压缩比 浏览:715
oppo怎样修改手机里的文件夹名称 浏览:218
PHP图片上传替换 浏览:140
androidtv桌面 浏览:810
miui10版本怎么隐藏app 浏览:52
阿里云服务器怎么输入命令 浏览:426
如何通过服务器连接网络 浏览:664
一张大事年表pdf 浏览:397
鸡兔同笼java编程 浏览:611