MATLAB에서 입자 필터를 사용하여 노이즈 제거
-
20-12-2019 - |
문제
파티클 필터를 사용하여 이미지의 노이즈를 제거하려고 합니다.입자 필터를 완전히 구현한 것은 아니며 일부만 사용하고 있습니다.저는 MATLAB을 처음 사용하는데 다음과 같은 오류가 발생합니다.
"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)];"
디버깅을 시도했지만 코드가 잘못된 이유를 찾을 수 없습니다.
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');
해결책
오류는 다음을 의미합니다. i
또는 j
의 행이나 열 수보다 큽니다. EImg
.
그런 일이 일어나는 이유는 덮어쓰기 때문입니다. EImg
루프의 각 반복에서 다음 줄에: EImg=mean(X_Particle)
.이것은 만든다 EImg
크기가 다른 배열이므로 r
행과 c
더 이상 열.코드의 기능을 모르기 때문에 문제를 해결하는 방법을 알려줄 수 없지만 이것이 바로 오류가 표시되는 이유입니다.
제휴하지 않습니다 StackOverflow