MATLAB焦点测量图像

时间:2015-02-02 20:13:41

标签: matlab focus imaging

我正在尝试学习如何查找图像是否处于焦点并将其从图像列表中删除。图像的分辨率非常高(jp2),我试图使用我在MATLAB网站上找到的代码http://www.mathworks.com/matlabcentral/fileexchange/27314-focus-measure/content/fmeasure/fmeasure.m 我正在尝试使用以下功能

WSize = 15; % Size of local window (only some operators)

case 'SFIL' %Steerable filters (Minhas2009)
% Angles = [0 45 90 135 180 225 270 315];
N = floor(WSize/2);
sig = N/2.5;
[x,y] = meshgrid(-N:N, -N:N);
G = exp(-(x.^2+y.^2)/(2*sig^2))/(2*pi*sig);
Gx = -x.*G/(sig^2);Gx = Gx/sum(Gx(:));
Gy = -y.*G/(sig^2);Gy = Gy/sum(Gy(:));
R(:,:,1) = imfilter(double(Image), Gx, 'conv', 'replicate');
R(:,:,2) = imfilter(double(Image), Gy, 'conv', 'replicate');
R(:,:,3) = cosd(45)*R(:,:,1)+sind(45)*R(:,:,2);
R(:,:,4) = cosd(135)*R(:,:,1)+sind(135)*R(:,:,2);
R(:,:,5) = cosd(180)*R(:,:,1)+sind(180)*R(:,:,2);
R(:,:,6) = cosd(225)*R(:,:,1)+sind(225)*R(:,:,2);
R(:,:,7) = cosd(270)*R(:,:,1)+sind(270)*R(:,:,2);
R(:,:,8) = cosd(315)*R(:,:,1)+sind(315)*R(:,:,2);
FM = max(R,[],3);
FM = mean2(FM);

我不明白WSize = 15是如何确定的,这与数据有关,还是与MATLAB中的窗口大小有关?另外我不明白这两行是如何确定的

N = floor(WSize/2);
sig = N/2.5;

2.5是标准偏差还是从数据中确定的某个值?我知道这不是一个MATLAB问题,而是一个焦点测量问题,但我希望有人使用这个代码,可以帮助我破译WSize,N和sig值是如何确定的。如果有人能提出更好的方法来查找图像的焦点,我也会很感激。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我的理解是WSize是任意设定的。邻域的大小应根据图像的大小和分辨率进行调整。 sig=2.5导致正态分布,标准差为2.5。

Matlab中没有任何内容可以强制执行这些参数。我阅读了代码中提到的文章(需要订阅)。它声称他们使用5x5的窗口大小来获得结果。它指的是关于可操纵滤波器(freely available from the MIT)的(IMO,更好)论文。