2014-11-11 8 views
0

Мне нужно создать контрастную карту об изображении. Метод прост: оцените контраст (C = SD/среднее) в окне 5x5 (скользящее). Переместите пиксель окна по пикселю через весь рисунок и сохраните результаты в новой матрице.Оценка контраста изображения. Как ускорить этот код?

Я создал этот скрипт для решения проблемы, но это слишком медленно. Базовое изображение представляет собой 16-битное изображение .tif 1024x1024. Процесс составляет ~ 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

На каком языке вы владеете? – Dmitry

+0

Похож на matlab/октаву. – MSalters

ответ

1

Одним из способов может быть создание образа среднего с использованием размера окна 5x5, то стандартный фильтр локального отклонения с размером окна 5х5. После этого вы можете быстро вычислить результат.

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