java 图像膨胀_java 图像的腐蚀与膨胀

腐蚀:把结构元素B平移a后得到Ba,若Ba包含于X,我们记下这个a点,所有满足上述条件的a点组成的集合称做X被B腐蚀(Erosion)的结果。用公式表示为:E(X)={a|

Ba

X}=X

B,如图所示

15f0d4740efd10441e29e475ad4446f4.png

膨胀:可以看做是腐蚀的对偶运算,其定义是:把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。所有满足上述条件的a点组成的集合称做X被B膨胀的结果。用公式表示为:D(X)={a

| Ba↑X}=X

B,如图所示。

c3239b49faed905e358c0b1ea85e6818.png

关于更详细请看 图像的膨胀与腐蚀、细化

既然了解原理,下面奉上实现的代码:

膨胀:public void Expand(int[][] mask){

IterBinary();//二值化

int mh = mask.length;

int mw = mask[1].length;

int sh = (mh+1)/2;

int sw = (mw+1)/2;

int[] d= new int[w*h];

for(int i=(mh-1)/2+1;i

for(int j=(mw-1)/2+1;j

int s = 0;

for(int m=0; m

for(int n=0;n

if(mask[m]

*this.data[j+n-sw +(i+m-sh)*w] == 255)

s = 255;

}

}

d[j + i * w] = s;

}

}

this.data = d;

}

腐蚀:public void Erosion(int[][] mask){

IterBinary();//二值化

int mh = mask.length;

int mw = mask[1].length;

int sh = (mh+1)/2;

int sw = (mw+1)/2;

int[] d= new int[w*h];

for(int i=(mh-1)/2+1;i

for(int j=(mw-1)/2+1;j

int s = 0;

for(int m=0; m

for(int n=0;n

if(mask[m]

*255 == this.data[j+n-sw +(i+m-sh)*w])

s++;

}

}

d[j + i * w] = (s==mh*mw)?255:0;

}

}

this.data = d;

}

其中,mask是模板,我们都取3*3的全一矩阵。注意的是,这两个操作我是对黑底白字进行操作的。

原图和在原图上膨胀的结果:

742236522d73bfca310e11dd83663c66.png

b6b449957589ab780d0a290e3e473436.png

然后在膨胀的基础上腐蚀(在原图上腐蚀就没有了。。):

f5dee2e1d06b86a3a8b2be979129ed75.png

如果对白底黑字,两者的结果刚好反过来,结果如下:

4cc451741fb50f8d22a110fda2cb9f47.png

以上就是java 图像的腐蚀与膨胀的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值