MATLAB计算tire.tif图像对比度两种方法结果不一致求代码排查
两种Matlab图像对比度计算方法结果不一致的问题排查
我最近尝试计算tire.tif图像的对比度,用了两种实现方法,但得到的结果完全不一样,想请大家帮忙看看代码哪里出问题了。我的代码和各自的计算结果如下:
[M,N]=size(I); Lumi=1/(M*N)*sum(I(:)); % 计算结果为53.66 Cont_method1=sqrt(1/(N*M)*sum(I(:)-Lumi)^2); % 计算结果为5.478e+03 Cont_method2=sqrt(1/prod(size(I))*sum(power((I(:)-Lumi),2))); % 计算结果为9.0292
问题根源分析
问题出在**Cont_method1的计算逻辑错误**:
- 在
sum(I(:)-Lumi)^2这部分,我是先把所有(像素值-亮度均值)的结果求和,再对这个总和进行平方; - 但对比度(标准差)公式要求的是先对每个像素的差值做平方运算,再将所有平方值求和,这正是
Cont_method2里sum(power((I(:)-Lumi),2))实现的逻辑。
举个简单的小例子就能看明白差异:假设图像只有两个像素[1,3],亮度均值是2。
- 方法1的计算:
sum(1-2, 3-2) = 0,平方后是0,最终结果是sqrt(0/2)=0; - 方法2的计算:
sum((1-2)^2, (3-2)^2)=1+1=2,最终结果是sqrt(2/2)=1;
显然方法2才符合对比度的定义。
修正后的方法1代码
只需要把sum(I(:)-Lumi)^2改成逐元素平方后再求和,也就是:
Cont_method1=sqrt(1/(N*M)*sum( (I(:)-Lumi).^2 ));
这样修改后,方法1和方法2的计算结果就会完全一致了。
内容的提问来源于stack exchange,提问作者Smash Ribas
相关产品推荐
相关产品推荐

