我正在开发一个应用程序,用于从图像中确定纤维网络的对齐程度。我已经阅读了几篇关于这个问题的论文,它们基本上是这样做的:
1. 找到图像(灰度,范围为0-255)的2D离散傅里叶变换(DFT = F(u,v))。 2. 找到傅里叶频谱(FS = abs(F(u,v)))和功率谱(PS = FS ^ 2)。 3. 将频谱转换为极坐标并将其分成1º间隔。 4. 计算每个间隔(theta)的数平均线强度(FI),即所有与水平轴形成“theta”度的强度(像素)的平均值。 5. 将FI(theta)转换为笛卡尔坐标 Cxy(theta)= [FI * cos(theta),FI * sin(theta)] 6. 找到矩阵Cxy'* Cxy的特征值(lambda1和lambda2)。 7. 将对齐指数作为alpha = 1-lamda2 / lambda1找到。
我已经在MATLAB中实现了这个过程(下面是代码),但是我不确定是否正确,因为第3点和第4点对我来说不是很清楚(虽然我得到了类似于论文的结果,但并非在所有情况下都是如此)。例如,在第3点中,“spectrum”是指FS还是PS?而在第4点中,应该如何进行平均?是否考虑所有像素?(即使对角线上有更多像素)。
1. 找到图像(灰度,范围为0-255)的2D离散傅里叶变换(DFT = F(u,v))。 2. 找到傅里叶频谱(FS = abs(F(u,v)))和功率谱(PS = FS ^ 2)。 3. 将频谱转换为极坐标并将其分成1º间隔。 4. 计算每个间隔(theta)的数平均线强度(FI),即所有与水平轴形成“theta”度的强度(像素)的平均值。 5. 将FI(theta)转换为笛卡尔坐标 Cxy(theta)= [FI * cos(theta),FI * sin(theta)] 6. 找到矩阵Cxy'* Cxy的特征值(lambda1和lambda2)。 7. 将对齐指数作为alpha = 1-lamda2 / lambda1找到。
我已经在MATLAB中实现了这个过程(下面是代码),但是我不确定是否正确,因为第3点和第4点对我来说不是很清楚(虽然我得到了类似于论文的结果,但并非在所有情况下都是如此)。例如,在第3点中,“spectrum”是指FS还是PS?而在第4点中,应该如何进行平均?是否考虑所有像素?(即使对角线上有更多像素)。
rgb = imread('network.tif');%513x513 pixels
im = rgb2gray(rgb);
im = imrotate(im,-90);%since FFT space is rotated 90º
FT = fft2(im) ;
FS = abs(FT); %Fourier spectrum
PS = FS.^2; % Power spectrum
FS = fftshift(FS);
PS = fftshift(PS);
xoffset = (513-1)/2;
yoffset = (513-1)/2;
% Avoid low frequency points
x1 = 5;
y1 = 0;
% Maximum high frequency pixels
x2 = 255;
y2 = 0;
for theta = 0:pi/180:pi
% Transposed rotation matrix
Rt = [cos(theta) sin(theta);
-sin(theta) cos(theta)];
% Find radial lines necessary for improfile
xy1_rot = Rt * [x1; y1] + [xoffset; yoffset];
xy2_rot = Rt * [x2; y2] + [xoffset; yoffset];
plot([xy1_rot(1) xy2_rot(1)], ...
[xy1_rot(2) xy2_rot(2)], ...
'linestyle','none', ...
'marker','o', ...
'color','k');
prof = improfile(F,[xy1_rot(1) xy2_rot(1)],[xy1_rot(2) xy2_rot(2)]);
i = i + 1;
FI(i) = sum(prof(:))/length(prof);
Cxy(i,:) = [FI(i)*cos(theta), FI(i)*sin(theta)];
end
C = Cxy'*Cxy;
[V,D] = eig(C)
lambda2 = D(1,1);
lambda1 = D(2,2);
alpha = 1 - lambda2/lambda1
图示:A)原始图像,B)log(P + 1)绘图,C)FI极坐标图。
我的主要问题是,当我选择完美对齐的人工图像(如附图),我得到alpha = 0.91,而实际上应该是准确的1。 非常感谢任何帮助。
注:中间图中的黑点只是被improfile使用的点。