Frage

Ich versuche, ein Bild mit einem Partikelfilter zu entrauschen.Es ist keine vollständige Implementierung des Partikelfilters, ich benutze nur einen Teil davon.Ich bin neu in Matlab und erhalte die folgende Fehlermeldung

"Index exceeds matrix dimensions.

Error in particle_filter_denoising (line 42)
         Xkposeterior=[EImg(i,j-1);EImg(i-1,j);EImg(i-1,j-1)];"

Ich habe versucht zu debuggen, aber ich kann nicht herausfinden, warum der Code falsch läuft.

    Img = imread('a.jpg');
Img= rgb2gray(Img);
Img=im2double(Img);
V =0.001;
clc;

x_N=V ;
x_R=V *2;
NImg=imnoise(Img,'gaussian',Var);

subplot(1,3,1);imshow(Img);title('Original Image');
subplot(1,3,2);imshow(NImg);title('Noisy Gaussian Image');

[r  c] =size(Img);
EImg=zeros(r,c);
EImg(1,:) =Img(1,:);
EImg(:,1)=Img(:,1);
A=[0.35 0.35 0.3;0 1 0;0 0 1];

%Initial state
Xkposeterior=[EImg(2,  1);EImg(1,2);EImg(1,1)];
X_prior = A*Xkposeterior;

%particles
N=100;
X_Particle=[];

X_P_wi=[];

for i = 1:N
    X_Particle(i) = X_prior(1) + sqrt(V) * randn;
end




%%Xkposeterior=[EImg(2,1);EImg(1,2);EImg(1,1)];
for i=2:r
    for j=2:c
         Zk=NImg(i,j);

         Xkposeterior=[EImg(i,j-1);EImg(i-1,j);EImg(i-1,j-1)];
         X_prior = A*Xkposeterior;
         for k_particle=1:N
             X_Particle(k_particle)=X_prior(1) + sqrt(V) * randn;
             X_P_wi(k_particle)=(1/sqrt(2*pi*x_R)) * exp(-(Zk - X_Particle(k_particle))^2/(2*x_R));
         end
         X_P_wi = X_P_wi./sum(X_P_wi);
         for m = 1 : N
            X_Particle(m) = X_Particle(find(rand <= cumsum( X_P_wi),1));
         end    

         EImg= mean(X_Particle);



    end
end




subplot(1,3,3);imshow(EImg, []);title(' Particle Denoised Image');
War es hilfreich?

Lösung

Der Fehler bedeutet, dass i oder j ist größer als die Anzahl der Zeilen oder Spalten in EImg.

Der Grund, warum das passiert, ist, dass Sie überschreiben EImg bei jeder Iteration der Schleife an der Zeile: EImg=mean(X_Particle).Das macht EImg ein Array mit einer anderen Größe, und so wird es nicht haben r zeilen und c spalten mehr.Ich kann Ihnen nicht sagen, wie Sie das Problem beheben können, da ich nicht weiß, was der Code bewirkt, aber deshalb wird der Fehler angezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top