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

조회 수: 3 (최근 30일)
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개)

카테고리

Help CenterFile Exchange에서 Geometric Transformation and Image Registration에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by