图像对比度估计。如何加快这段代码?

时间:2014-11-11 22:33:08

标签: performance image-processing sliding-window contrast

我必须创建一个关于图像的对比图。该方法很简单:在5x5(滑动)窗口中估算对比度(C = SD / Mean)。通过整个图片逐个像素地移动窗口,并将结果保存在新的矩阵中。

我创建了这个脚本来解决问题,但速度太慢了。基本图片是1024x1024 16位.tif图像。这个过程长约40-50秒,但其他程序在不到3秒的时间内解决了这个问题。我怎样才能加速我的剧本?

我的原始剧本:

M=imread('image.tif');

for S=1:2 SM1_b=size(M,1); SM2_b=size(M,2);

    M(:,SM2_b+1)=M(:,SM2_b);
    M(SM1_b+1,:)=[M(SM1_b,1:SM2_b) M(SM1_b,SM2_b)];

end

M=[M(1,1:SM2_b+1);M(1,1:SM2_b+1);M]; M=[M(1:(size(M,1)),1) M(1:(size(M,1)),1) M]; clear S SM1_b SM2_b

KPic=zeros(1024);

for i=1:1024 for j=1:1024

    KPic(i,j)=std2(M(i:i+4,j:j+4))/mean2(M(i:i+4,j:j+4));
    end
end

1 个答案:

答案 0 :(得分:1)

一种方法是使用5x5的窗口大小构建均值图像,然后使用窗口大小为5x5的局部标准差滤镜。完成此操作后,您可以非常快速地计算结果。

M = imread('image.tif');
h = fspecial('average', 5);
mean_im = filter2(M, h);
std_im = stdfilt(M, 5);
KPic = std_im ./ mean_im;