将二进制图像转换为高斯点

时间:2014-11-22 13:48:46

标签: matlab image-processing convolution

我有一个包含一些白点的二进制图像 A 。现在我想要一个图像 B ,其中对于 A 中的每个白点,强度会扩散到其邻居,以便这些点的值为1,并且值会在其周围减小。因此,最终图像 B 的值范围为[0 1],其中1发生在我的白点。

我的方法:

我使用此代码将图像与高斯函数进行卷积:

x=-ceil(siz/2):ceil(siz/2);
H = exp(-(x.^2/(2*sigma^2)));
H = H/sum(H(:));%normalize the kernel
Hx=reshape(H,[length(H) 1]);
Hy=reshape(H,[1 length(H)]);
I=imfilter(imfilter(I,Hx, 'same' ,'replicate'),Hy, 'same' ,'replicate');

问题: 当我对整个图像执行此操作时,当我有两个连续的白色邻居时,我遇到问题,这些点处的卷积具有高值,因此,当归一化 B 时,最大值发生在此位置,我的原始白点的值小于1。

有没有办法我可以单独传播强度(将每个点视为源而不管其邻居)并且最终图像是此操作的最大值,因此在2个白点的位置,这两点值为1且它们的邻居最多有2个高斯?enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

你可以试试硬帽。

要么在卷积之前保存白点的位置,要么找到所有点的位置> 1并将它们设置为1:

B(B>1) = 1