SSIM算法基于HVS更擅长从图像中提取结构信息的事实,并且利用结构相似度来计算图像的感知质量。
在Z. Wang等人的论文Multi-scale structural similarity for image quality assessment中也提到, S S I M SSIM SSIM算法要好于当时的其它的感知图像质量指标。
SSIM的计算公式:
SSIM计算中的图像分割
==在整幅图片的跨度上,图像亮度的均值和方差变化较为剧烈;并且图像上不同区块的失真程度也有可能不同;再者人眼睛每次只能聚焦于一处,更关注局部数据而非全局数据。==因此如上的 S S I M SSIM SSIM算法不能直接作用于一整副图像。
在论文Image quality assessment: From error visibility to structural similarity中,作者采用 11 × 11 11 \times 11 11×11的滑动窗口将整副图像分割为 N N N个patch,然后计算每一个patch的 S S I M SSIM SSIM,最后计算所有patch的 S S I M SSIM SSIM值的平均数( M e a n S S I M : M S S I M Mean \ \ SSIM:MSSIM Mean SSIM:MSSIM)作为整副图像的 S S I M SSIM SSIM。
为避免滑动窗口带来的块效应,在计算每个patch的均值 μ \mu μ和方差 σ 2 \sigma^2 σ2时,作者采用 σ = 1.5 \sigma=1.5 σ=1.5的高斯卷积核作加权平均。整副图像有 N N N个patch,则 M S S I M MSSIM MSSIM的计算公式为:
FFmpeg计算SSIM的实际实现
FFmpeg提供了计算 S S I M SSIM SSIM的实现:
https://github.com/FFmpeg/FFmpeg/blob/master/tests/tiny_ssim.c。
从代码注释中看到:为提升算法性能,没采用论文中的高斯加权方式计算每个patch的 S S I M SSIM SSIM,而采用了 8 × 8 8 \times 8 8×8的块来计算每个patch的 S S I M SSIM SSIM。
standard approximation of overlapped 8x8 block sums
解释一下注释中的standard approximation of overlapped 8x8 block sums 的含义。分解成两个部分来解释:overlapped 8x8 block和sums。
overlapped 8x8 block的含义:
FFmpeg在计算图像 S S I M SSIM SSIM时,首先以 4 × 4 4 \times 4 4×4的块大小把图1所示的分辨率为