腐蚀算法
⑴ 数字图像处理 膨胀和腐蚀算法的实现
腐蚀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为1,结果图像的该像素为1。否则为0。
结果:使二值图像减小一圈
定义:E = B S = { x,y | SxyB}
膨胀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为0,结果图像的该像素为0。否则为1
结果:使二值图像扩大一圈
定义:E = B S = { x,y | Sxy∩B ≠Ф}
⑵ 图像细化与腐蚀,粗化与膨胀在应用上有什么区别
膨胀和腐蚀
膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的.
① 膨胀
是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的.A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的.我们可以把上式改写为:
结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的.
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0.否则为1
② 腐蚀
对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为1,结果图像的该像素为1.否则为0
腐蚀处理的结果是使原来的二值图像减小一圈.
⑷ 击中(匹配)或击不中变换
⑶ 金属腐蚀速度的计算方法
从交流阻抗李沙育图计算腐蚀速度——电子计算机的初步应用
张承典;徐乃欣
本文针对用复数阻抗图解法处理交流阻抗,轨迹呈现半圆形的腐蚀体系,采用最小二乘法求出最佳轨道半径。运用BASIC语言编制了一套计算程序。这样,可从李沙育图上的原始数据,直接算出极化阻力R_p等参数。作者用国产DJS—130型计算机,对A_3钢在3.5%NaCl体系中的阻抗测量,进行了分析处理。
⑷ 问一下关于腐蚀和膨胀算法的问题
求算法复杂度一般不会使用计算机进行验证而是分析程序运行所需要的机器指令个数与输入的数据之间的函数关系。如果你想编写一个程序来寻找提高速度的算法,我想是本末倒置了。首先你得有几个正确的算法,然后才能为这几个算法分别编程,最后使用测试案例来验证哪个算法的性能更好些。
⑸ 如何进行数字图像处理中的膨胀和腐蚀计算
腐蚀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为1,结果图像的该像素为1。否则为0。
结果:使二值图像减小一圈
定义:E = B S = { x,y | SxyB}
膨胀的算法:
用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;
}
⑹ 关于二值图像的腐蚀算法··最好能用C#的内存法实现
腐蚀的算法:
用3x3的结构元素,扫描图像的每一个像素
用结构元素与其覆盖的二值图像做“与”操作
如果都为1,结果图像的该像素为1。否则为0。
结果:使二值图像减小一圈
定义:E = B S = { x,y | SxyB}
源程序:
I=imread('C:\Documents and Settings\Administrator\桌面\1.jpg'); %载入图像
I1=rgb2gray(I);
subplot(1,2,1);
imshow(I1);
title('灰度图像')
axis([50,250,50,200]);
grid on; %显示网格线
axis on; %显示坐标系
se=strel('disk',1); %生成圆形结构元素
I2=imerode(I1,se); %用生成的结构元素对图像进行腐蚀
subplot(1,2,2);
imshow(I2);
title('腐蚀后图像');
axis([50,250,50,200]);
grid on; %显示网格线
axis on;
⑺ 图像处理中的腐蚀与膨胀是什么意思
图像处理分为多种,对于不同的图像腐蚀和膨胀的定义不同。
1、形态学图像处理是在图像中移动一个结构元素,然后将结构元素与下面的二值图像进行交、并等集合运算;先腐蚀后膨胀的过程称为开运算。
它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。先膨胀后腐蚀的过程称为闭运算。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
2、对灰度图像的膨胀(或腐蚀)操作有两类效果:
(1)如果结构元素的值都为正的,则输出图像会比输入图像亮(或暗);
(2)根据输入图像中暗(或亮)细节的灰度值以及它们的形状相对于结构元素的关系,它们在运算中或被消减或被除掉。
腐蚀就是使用算法,将图像的边缘腐蚀掉。作用就是将目标的边缘的“毛刺”踢除掉。
膨胀就是使用算法,将图像的边缘扩大些。作用就是将目标的边缘或者是内部的坑填掉。
使用相同次数的腐蚀与膨胀,可以使目标表面更平滑。
(7)腐蚀算法扩展阅读:
1、图像变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理。
目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。
2、图像编码压缩:图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。
压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。
3、图像增强和复原:图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。
如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像
参考资料来源:网络-图像处理
⑻ 图像处理中腐蚀算法是为了消除噪声的吗
算是吧
⑼ opencv的腐蚀用的是什么算法
可以修改下,膨胀腐蚀时用到的kernel.
kernel的形状一般有下面三种:
矩形:
morph_rect
交叉形:
morph_cross
椭圆形:
morph_ellipse
比如:想选用15*15的正方形kernel进行膨胀操作.
可以利用:
mat
element
=
getstructuringelement(morph_rect,
size(15,
15));
dilate(image,
out,
element);
这样的语句来实现。
⑽ 数字图像处理里的腐蚀和膨胀到底是指什么
膨胀
定义: 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的结构元素时,使物体的边界沿周边减少一个像素。
去掉小于结构元素的物体,选择不同大小的结构元素,可以去掉大小不同的物体。
如果两物体之间有细小的连通,当结构元素足够大时,可以将物体分开。
不同的结构元素,可导致不同的结果。