Я пытаюсь реализовать алгоритм, описанный в этой статье:
Разложение изображений биосфелей во временных спектральных диапазонах
Вот объяснение алгоритма:
Мы записали последовательность
N
последовательных спекл-изображений с выборкой частотаfs
. Таким образом, можно было наблюдать, как пиксель развивается через изображенияN
. Эту эволюцию можно рассматривать как время серии и может обрабатываться следующим образом: каждый сигнал соответствующие эволюции каждого пикселя, использовались в качестве входных данных для банка фильтров. Значения интенсивности ранее были разделены их временное среднее значение для минимизации локальных различий в коэффициенте отражения или освещение объекта. Максимальная частота, которая может быть адекватно анализируемый, определяется теоремой выборки и с половиной частоты дискретизацииfs
. Последний установлен камерой CCD, размер изображения и граббер. Банк фильтров как показано на рисунке 1.
В нашем случае десять фильтров Баттерворта порядка 5 °, но это число можно варьировать в соответствии с требуемым дискриминация. Банк был реализован на компьютере с использованием MATLAB программного обеспечения. Мы выбрали фильтр с маслом, потому что, помимо его простота, она максимально плоская. Другие фильтры, бесконечный импульс ответ или конечный импульсный отклик.
С помощью этого банк фильтров, десять соответствующих сигналов каждого фильтра каждого временная эволюция пикселей была получена как выход. Средняя энергия Eb в каждом сигнале затем рассчитывали:
где
pb(n)
- интенсивность отфильтрованного пикселя в n-м изображении для фильтраb
, деленного на его среднее значение, аN
- общее количество изображений. Таким образом, были получены значения энергии для каждого пикселяEn
каждый из краев, принадлежащих одной из полос частот на фиг .1.С этими значениями можно построить десять изображений активного объекта, каждый из которых показывает, сколько энергии изменяющегося во времени спекл находится в определенной полосе частот. Ложное присвоение цвета серому уровни результатов будут способствовать дискриминации.
и вот моя база кода MATLAB:
for i=1:520
for j=1:368
ts = [];
for k=1:600
ts = [ts D{k}(i,j)]; %%% kth image pixel i,j --- ts is time series
end
ts = double(ts);
temp = mean(ts);
if (temp==0)
for l=1:10
filtImag1{l}(i,j)=0;
end
continue;
end
ts = ts-temp;
ts = ts/temp;
N = 5; % filter order
W = [0.0 0.10;0.10 0.20;0.20 0.30;0.30 0.40;0.40 0.50;0.50 0.60 ;0.60 0.70;0.70 0.80 ;0.80 0.90;0.90 1.0];
[B,A]=butter(N,0.10,'low');
ts_f(1,:) = filter(B,A,ts);
N1 = 5;
for ind = 2:9
Wn = W(ind,:);
[B,A] = butter(N1,Wn);
ts_f(ind,:) = filter(B,A,ts);
end
[B,A]=butter(N,0.90,'high');
ts_f(10,:) = filter(B,A,ts);
for ind=1:10
%Following Paper Suggestion
filtImag1{ind}(i,j) =sum(ts_f(ind,:).^2);
end
end
end
for i=1:10
figure,imshow(filtImag1{i});
colorbar
end
pre_max = max(filtImag1{1}(:));
for i=1:10
new_max = max(filtImag1{i}(:));
if (pre_max<new_max)
pre_max=max(filtImag1{i}(:));
end
end
new_max = pre_max;
pre_min = min(filtImag1{1}(:));
for i=1:10
new_min = min(filtImag1{i}(:));
if (pre_min>new_min)
pre_min = min(filtImag1{i}(:));
end
end
new_min = pre_min;
%normalize
for i=1:10
temp_imag = filtImag1{i}(:,:);
x=isnan(temp_imag);
temp_imag(x)=0;
t_max = max(max(temp_imag));
t_min = min(min(temp_imag));
temp_imag = (double(temp_imag-t_min)).*((double(new_max)-double(new_min))/double(t_max-t_min))+(double(new_min));
%median filter
%temp_imag = medfilt2(temp_imag);
imag_test2{i}(:,:) = temp_imag;
end
for i=1:10
figure,imshow(imag_test2{i});
colorbar
end
for i=1:10
A=imag_test2{i}(:,:);
B=A/max(max(A));
B=histeq(A);
figure,imshow(B);
colorbar
imag_test2{i}(:,:)=B;
end
но я не получаю такой же результат, как бумага. кто-нибудь может понять, почему? или где я поступил неправильно?
ИЗМЕНИТЬ
получая помощь от @Amro и используя его код, я получаю следующие изображения:
вот мое оригинальное изображение из прорастающей чешуйки 72hrs (400 изображений с 5 кадрами в секунду):
здесь представлены изображения результатов для 10 различных диапазонов: