교수의 설명에 따라 이미지 압축 코드를 작성했습니다. 그것은 잘 작동하지만, 일부 이미지는 다음과 같은 오류 보여MATLAB- 매트릭스 치수가 일치해야합니다.
**Error using +
Matrix dimensions must agree.
Error in idwt2 (line 90)
x = upsconv2(a,{Lo_R,Lo_R},sx,dwtEXTM,shift)+ ... % Approximation.
Error in nw (line 56)
DeCompImg=idwt2(cA1,c,cV1,cD1,'haar');**
코드는 몇 이미지 잘 작동을하고 몇 가지 이미지에 대한 오류 위에서 보여줍니다. 작업 공간을 확인했습니다. 원본 이미지 크기가 홀수 (255x255) 인 경우에만이 오류가 발생합니다. 이미지 크기가 짝수 인 경우 (256x256)이 코드는 정상적으로 작동합니다. 이 문제를 해결하는 방법 without using imresize
명령? 도와주세요.
내 압축 코드 :
%Reading an Image
I=imread('mandrill.jpg');
G=rgb2gray(I);
%Applying Haar Wavelet
[cA1,cH1,cV1,cD1] = dwt2(G,'haar');
%Applying 2x2 window averaing
CompImgH=blockproc(cH1, [2 2], @(x) mean(x.data(:)));
CompImgV=blockproc(cV1, [2 2], @(x) mean(x.data(:)));
CompImgD=blockproc(cD1, [2 2], @(x) mean(x.data(:)));
figure(1),
subplot(2,2,1);
imshow(G);
title('Original Image');
subplot(2,2,2);
imshow(CompImgH);
title('Horizontal Component');
subplot(2,2,3);
imshow(CompImgV);
title('Vertical Component');
subplot(2,2,4);
imshow(CompImgD);
title('Diagonal Component');
%DECOMPRESSION
%Inverse process for 2x2 window averaging
b=CompImgH;
[m,n,colormap]=size(b);
k=1; %Counter for Row and
l=1; %Column replication
%f=input('enter replication factor: ');
f=2; % replication factor
for i=1:m %Loop for reading row and
for t=1:f %Row replication
for j=1:n %Loop for reading column and
for t=1:f %Column replication
c(k,l)=b(i,j);
l=l+1;
end
end
l=1;
k=k+1;
end
end
DeCompImg=idwt2(cA1,c,cV1,cD1,'haar');
DecompressedImage=uint8(DeCompImg);
Orig_Image = im2double(G);%---Convert image to double class
Reconstructed_Image = im2double(DecompressedImage);%---Convert image to double class
[M N] = size(Orig_Image);%---Size of Original Image
err = Orig_Image - Reconstructed_Image;%---Difference between two images
MSE = (sum(sum(err .* err)))/(M * N);
'dwtmode ('status')'는 무엇을 반환합니까? 또한 루프 이후,'idwt2 '이전에'size (c)'는 무엇입니까? – chappjc
'idwt2'에서 오류가 발생했습니다. 아마도 반올림/바닥재 (어쩌면 2로 나눈 값) 일 수 있으므로 홀수 일 때 문제가 발생합니다. 또는 나누기가 반올림/마루가 될 수 없으며 그렇게해야합니다. 어떤 부서라도 찾아보고 이상한 숫자가 발생하면 올바른 일을하는지 확인하십시오. – Frederick
나는 아래의 명령을 사용하여이 오류를 없애려고했다. M = N 일 때만 작동하지만 N과 같지 않은 경우에는 작동한다. % [p q] = size (G); mod (p, 2) && mod (q, 2) % G = padarray (G, [1 1], 'pre') 인 경우 % % else –