алгоритм обработки изображений в MATLAB

Я пытаюсь реализовать алгоритм, описанный в этой статье:

Разложение изображений биоспеклов на временные спектральные полосы

Вот объяснение алгоритма:

Мы записали последовательность из Nпоследовательных спекл-изображения с выборкой частота fs. Таким образом можно было наблюдать, как пиксель развивается через Nизображений. Эту эволюцию можно рассматривать как время серии и могут быть обработаны следующим образом: Каждый сигнал соответствующее эволюции каждого пикселя, использовалось в качестве входных данных для банка фильтров. Значения интенсивности предварительно были разделены на их временное среднее значение для минимизации локальных различий в отражательной способности или освещение объекта. Максимальная частота, которую можно адекватно проанализирован определяется теоремой выборки и s половина частоты дискретизации fs. Последний устанавливается ПЗС-камерой, размер изображения и фреймграббер. Банк фильтров есть 1.

bank of filters

В нашем случае десять фильтров Баттерворта 5-го порядка были использованы, но это количество может варьироваться в соответствии с требуемым дискриминация. Банк был реализован на компьютере с помощью MATLAB. программное обеспечение. Мы выбрали фильтр Баттерворта, потому что, помимо его простота, она максимально плоская.Другие фильтры, бесконечный импульс ответ, или может быть использована конечная импульсная характеристика.

С помощью этого банк фильтров, десять соответствующих сигналов каждого фильтра каждого временная эволюция пикселей была получена в качестве выходных данных. Средняя энергия Eb в каждом сигнале затем вычислялось:

energy equation

где 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_maxnew_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 и используя его код, я получаю следующие изображения: вот мое исходное изображение из 72-часовой проросшей чечевицы (400 изображений, 5 кадров в секунду):enter image description here

вот результаты изображений для 10 разных полос:

Band1Band2Band3Band4Band5Band6Band7BAnd8Band9Band10

15
задан user261002 13 June 2012 в 11:10
поделиться