matlab中ssim算法用于比较的两幅图像必须是彩色图像吗?如果是黑白图灰度图可以吗?程序怎么改

matlab中ssim算法用于比较的两幅图像必须是彩色图像吗?如果是黑白图灰度图可以吗?程序怎么改,第1张

可以啊,

这是matlab的一个例程,读取的图片就是亩扒灰度图像唤败,运行和耐颤没问题

ref = imread('pout.tif')

H = fspecial('Gaussian',[11 11],1.5)

A = imfilter(ref,H,'replicate')

subplot(1,2,1)imshow(ref)title('Reference Image')

subplot(1,2,2)imshow(A) title('Blurred Image')

[ssimval, ssimmap] = ssim(A,ref)

fprintf('The ssim value is %0.4f.\n',ssimval)

figure, imshow(ssimmap,[])

title(sprintf('ssim Index Map - Mean ssim Value is %0.4f',ssimval))

给定一个大小为的干净图像和噪声图像 ,均方误差定义为:

然后就定义为:

其中为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由位二进制来表示,那么 。

一般地,针对 uint8 数据,最大像素值为慧答伍 255,;针对浮点型数据,最大像素值为 1。

上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。

其中,第二和第三种方法比较常见。

compare_psnr(im_true, im_test, data_range=None) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指前或标称为 MPSNR。

公式基于样本和之间的三个比较衡量:亮度举孙 (luminance)、对比度 (contrast) 和结构 (structure)。

一般取 。

那么

将设为 1,可以得到

每次计算的时候都从图片上取一个的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。

compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12291328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存