2011-03-21 6 views
0
a=imread('pic1.jpg'); 
b=0.25*a; 
c=4.0*b; 
figure; 
imshow(c); 
MSE = reshape(mean(mean(((a) - (c)).^2,2),1),[1,3]) 

코드는 오류없이 올바르게 작동합니다. a의 크기는 256 * 256 * 3 RGB 유형입니다. 평균 제곱 오류를 계산할 때 논리 오류

  1. 지금 논리적으로는 MSE가 작업을 반대한다 4.0 c를 결과를 곱 때문에 RGB 밴드에 대한 제로 했어야 그러나, 2 문제가 있습니다. 그러나 MSE는 1.1361 1.2780 1.2902으로 나오고 있습니다. b=0.27.*a으로 테스트 할 때도 마찬가지입니다. then c=3.703703704.*b; MSE 공식에서
  2. 는 더블 데이터 유형을 제거에 오류가 사람이 이런 일이되고 치료가 무엇 그것을 명쾌하게 이유를 설명 할 수 0.5346 0.6132 0.6275

을 최소화?

답변

3

변수의 데이터 유형을 살펴보십시오. 아마도 uint8 일 것입니다. 즉, b는 또한 둥근 값을 포함하는 uint8이됩니다. 즉 픽셀 당 2 비트의 정보가 손실됩니다.

"이중 데이터 유형"을 언급했지만 코드에서 어디에서 사용하는지 알지 못합니다.

으로 시작한 경우 a = double (imread ('pix1.jpg')); MSE가 거의 0이어야합니다 (256 * 256 * 3 * eps (즉, 반올림 오류)).

+0

""이중 데이터 유형 "을 언급했지만 코드에서 어디에서 사용하는지 알지 못합니다." uint8로 작업하고 있다면 MSE = reshape (mean ((double (a) - double (c)).^2,2), 1), [1,3] 오류 값은 다릅니다. 이것은 쿼리를 게시 할 때 (uint8 유형 일 때) 관찰되었지만 설명 후에는 더 이상 보유하지 않습니다. 고맙습니다. – SKM

관련 문제