Why am i getting two different MSE, while using formula and syntax immse?

조회 수: 2(최근 30일)
Samson David Puthenpeedika
Samson David Puthenpeedika 2022년 1월 22일
댓글: Samson David Puthenpeedika 2022년 1월 22일
IS there any mistake in the formula applied for mean squarred error?
moving_img= imread("AT3_1m4_02.tif");
fixed_img= imread("AT3_1m4_03.tif");
crp_mv_img=imcrop(moving_img, [235, 210, 100, 100]);
crp_fx_img=imcrop(fixed_img, [235, 210, 100, 100]);
mse_1=immse(crp_fx_img,crp_mv_img)
mse_1 = 979.2353
[r,c]=size(crp_fx_img);
mse_2= sum((crp_mv_img-crp_fx_img).^2,"all")/(r*c)
mse_2 = 44.0342
Is mse_2 wrong?

채택된 답변

DGM
DGM 2022년 1월 22일
편집: DGM 2022년 1월 22일
The reason is that the two images are integer-class. The difference and square may result in data truncation.
moving_img = imread("AT3_1m4_02.tif");
fixed_img = imread("AT3_1m4_03.tif");
crp_mv_img = imcrop(moving_img, [235, 210, 100, 100]);
crp_fx_img = imcrop(fixed_img, [235, 210, 100, 100]);
mse_1 = immse(crp_fx_img,crp_mv_img)
mse_1 = 979.2353
[r,c] = size(crp_fx_img);
se = (double(crp_mv_img)-double(crp_fx_img)).^2; % square error
[min(se(:)) max(se(:))] % values are outside of range for uint8
ans = 1×2
0 27225
mse_2 = sum(se,"all")/(r*c)
mse_2 = 979.2353

추가 답변(0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by