我有一个包含一些白点的二进制图像 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个高斯?
答案 0 :(得分:1)
你可以试试硬帽。
要么在卷积之前保存白点的位置,要么找到所有点的位置> 1并将它们设置为1:
B(B>1) = 1