Bildverarbeitungs-Algorithmus in MATLAB

Bin ich versucht zu implementieren einen Algorithmus in diesem Papier beschrieben werden:

Zersetzung von biospeckle Bilder in einem temporären spectral bands

Hier ist eine Erklärung des Algorithmus:

Verzeichneten wir eine Sequenz von N aufeinander speckle-Bilder mit einer sampling
Frequenz fs. Auf diese Weise war es möglich zu beobachten, wie ein pixel
entwickelt sich durch die N Bilder. Dass die evolution behandelt werden kann, als eine Zeit
Serie und bearbeitet werden können in der folgenden Weise: Jedes signal
entsprechend der Entwicklung eines jeden pixels verwendet wurde als Eingang zu einem
bank von filtern. Die Intensitätswerte wurden bisher geteilt durch deren
zeitlichen Mittelwert zu minimieren lokalen Unterschiede in Reflexionsvermögen oder
Ausleuchtung des Objekts. Die maximale Frequenz
adäquat analysiert wird bestimmt durch das abtasttheorem und s die Hälfte
der sampling-Frequenz fs. Letzteres wird durch die CCD-Kamera, die
Größe des Bildes, und den frame-grabber. Die bank von filtern
skizziert in Abb. 1.

Bildverarbeitungs-Algorithmus in MATLAB

In unserem Fall zehn 5°, um Butterworth-Filter
verwendet wurden, aber diese Zahl kann variiert werden, entsprechend der erforderlichen
Diskriminierung. Die bank wurde umgesetzt, die in einem computer mit Hilfe von MATLAB
software. Wir entschieden uns für die Butter-worth-filter, zusätzlich zu seiner
Einfachheit, es ist maximal flach. Andere Filter, eine unendliche Impuls
Antwort, oder eine endliche Impulsantwort verwendet werden könnte.

Durch diese
bank von filtern, zehn entsprechenden Signale der einzelnen filter jeweils
temporäre pixel evolution wurden, die als Ausgang. Mittlere Energie Eb
in jedem signal wurde dann berechnet:

Bildverarbeitungs-Algorithmus in MATLAB

wo pb(n) ist die Intensität des gefilterten pixel in der N-TEN Bild
für filter b geteilt durch den Mittelwert und die N ist die Gesamtzahl der
Bilder. Auf diese Weise En Werte von Energie für jedes pixel erhalten wurden,
jeder der Saum Zugehörigkeit zu einer der Frequenzbänder in Fig. 1.

Mit diesen Werten ist es möglich, zu bauen, die zehn Bilder des aktiven Objekts,
jeder von denen zeigt, wie viel Energie der time-varying speckle-es
ist in einem bestimmten Frequenzband. Falsche Farbzuweisung zu den grauen
Ebenen in die Ergebnisse würden helfen, in der Diskriminierung.

und hier ist mein MATLAB code-Basis auf, die :

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

aber ich bin nicht immer zu dem gleichen Ergebnis wie Papier. hat jemand eine Ahnung, warum? oder wo ich schief gelaufen?

BEARBEITEN
durch die Hilfe von @Amro und mit seinen code, den ich endup mit den folgenden Bildern:
hier ist mein Original-Bild von 72hrs, gekeimte Linsen (400 Bilder, mit 5 Frames pro Sekunde): Bildverarbeitungs-Algorithmus in MATLAB

hier die Ergebnisse Bilder 10 andere band :

Bildverarbeitungs-Algorithmus in MATLAB

InformationsquelleAutor user261002 | 2012-06-02
Schreibe einen Kommentar