我有一段代码,我想了解。这是由我的同事给出的,我正在努力解释她为何采用她的方式。在评论中,她提到变量inertai1给出了均匀性因子。我想知道这是如何使图像均匀的。
代码背景: 最初它是2D图像。添加每列中的强度值,我得到一维向量。然后将所有值除以1D向量中的最大值。基本上正常化。
如果我是图像阅读。我有0到255之间的值。
S = sum(I,2); Smax = max(S);
Cprofile = S/Smax;
I2 = I*10;
I2(I2>255) = 255;
S2 = sum(I2,2); S2max = max(S2);
Cprofile2 = S2/S2max;
kCprofile2 = fft(Cprofile2);
//Do some frequency manipulations
Cprofile2_f = ifft(kCprofile2)
inperpx是每像素一英寸。
b1和d1是我感兴趣的Cprofile的第一个也是最后一个索引。
inertia1=0;
mass1=0;
for ii=b1:d1;
mass1=mass1+inperpx*Cprofile(ii);
inertia1=inertia1+abs(Cprofile2_f(ii)-Cprofile(ii))*inperpx;
end
inertia1=1-inertia1/mass1;
答案 0 :(得分:0)
假设"做一些频率操作"你遗漏的部分去除或减少高频(即应用低通滤波器),然后循环计算输入和平滑版本之间的绝对差值之和。当图像中存在更多高频分量时,绝对差值之和越大,因此图像越不均匀"。
请注意,可以使用mass1=sum(Cprofile(b1:d1))
和inertia1
的类似语句计算相同内容。乘以inperpx
是没用的,因为它会相同地缩放两个值,然后将两个值分开,使得缩放毫无意义。
另请注意,可以删除语句I(I>255) = 255
,因为之后您不会使用I
。也许这应该是I2(I2>255) = 255
?