ssim算法原理 - 我们都不是神的孩子 - CSDN博客 http://blog.csdn.net/ecnu18918079120/article/details/60149864

一、结构相似性(structural similarity)

      自然图像具有极高的结构性,表现在图像的像素间存在着很强的相关性,尤其是在空间相似的情况下。这些相关性在视觉场景中携带着关于物体结构的重要信息。我们假设人类视觉系统(HSV)主要从可视区域内获取结构信息。所以通过探测结构信息是否改变来感知图像失真的近似信息。
    大多数的基于误差敏感度(error sensitivity)的质量评估方法(如MSE,PSNR)使用线性变换来分解图像信号,这不会涉及到相关性。我们要讨论的SSIM就是要找到更加直接的方法来比较失真图像和参考图像的结构。

二、SSIM指数

    物体表面的亮度信息与照度和反射系数有关,且场景中的物体的结构与照度是独立的,反射系数与物体有关。我们可以通过分离照度对物体的影响来探索一张图像中的结构信息。这里,把与物体结构相关的亮度和对比度作为图像中结构信息的定义。因为一个场景中的亮度和对比度总是在变化的,所以我们可以通过分别对局部的处理来得到更精确的结果。
                  
      由SSIM测量系统可得相似度的测量可由三种对比模块组成,分别为:亮度,对比度,结构。接下来我们将会对这三模块函数进行定义。
      首先,对于离散信号,我们以平均灰度来作为亮度测量的估计:
                                                       (1)
       亮度对比函数l(x,y)是关于的函数。
       然后,由测量系统知道要把平均灰度值从信号中去除,对于离散信号,可使用标准差来做对比度估量值。
                                        (2)
       对比度对比函数c(x,y)就是的函数。
       接下来,信号被自己的标准差相除,结构对比函数就被定义成的函数。
       最后,三个对比模块组合成一个完整的相似测量函数:
                                    (3)
       
       S(x,y)应该满足以下三个条件:
       (1) 对称性:
       (2) 有界性:
       (3) 最大值唯一性:当且仅当x=y时,S(x,y)=1 。
      
       现在,我们定义三个对比函数。
       亮度对比函数:
                                                  (4)
       常数是为了避免接近0时造成系统的不稳定。
       特别的,我们选择,L为图像灰度级数,对于8-bit灰度图像,L=255,。公式(4)满足上述三个条件。
       对比度对比函数:
                                                   (5)
       常数,且。公式(5)依然满足上述三个条件。
       结构对比函数:
                                                     (6)
       其中
                                         (7)
      最后把三个函数组合起来,得到SSIM指数函数:
                                   (8)
      这里,用来调整三个模块间的重要性。
      为了得到简化形式,设,得到:
                                 (9)
 

三、SSIM指数应用于图像质量评估

   在图像质量评估之中,局部求SSIM指数的效果要好于全局。第一,图像的统计特征通常在空间中分布不均;第二,图像的失真情况在空间中也是变化的;第三,在正常视距内,人们只能将视线聚焦在图像的一个区域内,所以局部处理更符合人类视觉系统的特点;第四,局部质量检测能得到图片空间质量变化的映射矩阵,结果可服务到其他应用中。
     所以,在上述公式中,都加入了一个8*8的方形窗,并且逐像素的遍历整幅图片。每一步计算,和SSIM都是基于窗口内像素的,最终得到一个SSIM指数映射矩阵,由局部SSIM指数组成。然而,简单的加窗会使映射矩阵出现不良的“分块”效应。为解决这问题,我们使用11*11的对称高斯加权函数作为加权窗口,标准差为1.5,且
                                                 (10)
 
的估计值表示为:
                                               (11)
                                  (12)
                               (13)
       应用这种加窗方法,映射矩阵就可展现出局部各向同性的性质。
       在这里,经过一些实验总结,我们把K1设为0.01,K2设为0.03,然后用平均SSIM指数作为整幅图像的估计质量评价:
                    (14)
其中X,Y为图像,为局部SSIM指数在映射中的位置,MN为局部窗口的数量。
 
     
四、matlab实现
  1. function [mssim, ssim_map,siga_sq,sigb_sq] = SSIM(ima, imb)
  2. % ========================================================================
  3. %ssim的算法主要参考如下论文:
  4. %Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image
  5. % quality assessment: From error visibility to structural similarity,"
  6. % IEEE Transactios on Image Processing, vol. 13, no. 4, pp. 600-612,
  7. % Apr. 2004.
  8. %  首先对图像加窗处理,w=fspecial('gaussian', 11, 1.5);
  9. %                 (2*ua*ub+C1)*(2*sigmaa*sigmab+C2)
  10. %   SSIM(A,B)=————————————————————————
  11. %              (ua*ua+ub*ub+C1)(sigmaa*sigmaa+sigmab*sigmab+C2)
  12. %     C1=(K1*L);
  13. %     C2=(K2*L);   K1=0.01,K2=0.03
  14. %     L为灰度级数,L=255
  15. %-------------------------------------------------------------------
  16. %     ima - 比较图像A
  17. %     imb - 比较图像B
  18. %
  19. % ssim_map - 各加窗后得到的SSIM(A,B|w)组成的映射矩阵
  20. %    mssim - 对加窗得到的SSIM(A,B|w)求平均,即最终的SSIM(A,B)
  21. %  siga_sq - 图像A各窗口内灰度值的方差
  22. %  sigb_sq - 图像B各窗口内灰度值的方差
  23. %-------------------------------------------------------------------
  24. %  Cool_ben
  25. %========================================================================
  26. w = fspecial('gaussian', 11, 1.5);  %window 加窗
  27. K(1) = 0.01;
  28. K(2) = 0.03;
  29. L = 255;
  30. ima = double(ima);
  31. imb = double(imb);
  32. C1 = (K(1)*L)^2;
  33. C2 = (K(2)*L)^2;
  34. w = w/sum(sum(w));
  35. ua   = filter2(w, ima, 'valid');%对窗口内并没有进行平均处理,而是与高斯卷积,
  36. ub   = filter2(w, imb, 'valid'); % 类似加权平均
  37. ua_sq = ua.*ua;
  38. ub_sq = ub.*ub;
  39. ua_ub = ua.*ub;
  40. siga_sq = filter2(w, ima.*ima, 'valid') - ua_sq;
  41. sigb_sq = filter2(w, imb.*imb, 'valid') - ub_sq;
  42. sigab = filter2(w, ima.*imb, 'valid') - ua_ub;
  43. ssim_map = ((2*ua_ub + C1).*(2*sigab + C2))./((ua_sq + ub_sq + C1).*(siga_sq + sigb_sq + C2));
  44. mssim = mean2(ssim_map);
  45. return

一、结构相似性(structural similarity)

      自然图像具有极高的结构性,表现在图像的像素间存在着很强的相关性,尤其是在空间相似的情况下。这些相关性在视觉场景中携带着关于物体结构的重要信息。我们假设人类视觉系统(HSV)主要从可视区域内获取结构信息。所以通过探测结构信息是否改变来感知图像失真的近似信息。
    大多数的基于误差敏感度(error sensitivity)的质量评估方法(如MSE,PSNR)使用线性变换来分解图像信号,这不会涉及到相关性。我们要讨论的SSIM就是要找到更加直接的方法来比较失真图像和参考图像的结构。

二、SSIM指数

    物体表面的亮度信息与照度和反射系数有关,且场景中的物体的结构与照度是独立的,反射系数与物体有关。我们可以通过分离照度对物体的影响来探索一张图像中的结构信息。这里,把与物体结构相关的亮度和对比度作为图像中结构信息的定义。因为一个场景中的亮度和对比度总是在变化的,所以我们可以通过分别对局部的处理来得到更精确的结果。
                  
      由SSIM测量系统可得相似度的测量可由三种对比模块组成,分别为:亮度,对比度,结构。接下来我们将会对这三模块函数进行定义。
      首先,对于离散信号,我们以平均灰度来作为亮度测量的估计:
                                                       (1)
       亮度对比函数l(x,y)是关于的函数。
       然后,由测量系统知道要把平均灰度值从信号中去除,对于离散信号,可使用标准差来做对比度估量值。
                                        (2)
       对比度对比函数c(x,y)就是的函数。
       接下来,信号被自己的标准差相除,结构对比函数就被定义成的函数。
       最后,三个对比模块组合成一个完整的相似测量函数:
                                    (3)
       
       S(x,y)应该满足以下三个条件:
       (1) 对称性:
       (2) 有界性:
       (3) 最大值唯一性:当且仅当x=y时,S(x,y)=1 。
      
       现在,我们定义三个对比函数。
       亮度对比函数:
                                                  (4)
       常数是为了避免接近0时造成系统的不稳定。
       特别的,我们选择,L为图像灰度级数,对于8-bit灰度图像,L=255,。公式(4)满足上述三个条件。
       对比度对比函数:
                                                   (5)
       常数,且。公式(5)依然满足上述三个条件。
       结构对比函数:
                                                     (6)
       其中
                                         (7)
      最后把三个函数组合起来,得到SSIM指数函数:
                                   (8)
      这里,用来调整三个模块间的重要性。
      为了得到简化形式,设,得到:
                                 (9)
 

三、SSIM指数应用于图像质量评估

   在图像质量评估之中,局部求SSIM指数的效果要好于全局。第一,图像的统计特征通常在空间中分布不均;第二,图像的失真情况在空间中也是变化的;第三,在正常视距内,人们只能将视线聚焦在图像的一个区域内,所以局部处理更符合人类视觉系统的特点;第四,局部质量检测能得到图片空间质量变化的映射矩阵,结果可服务到其他应用中。
     所以,在上述公式中,都加入了一个8*8的方形窗,并且逐像素的遍历整幅图片。每一步计算,和SSIM都是基于窗口内像素的,最终得到一个SSIM指数映射矩阵,由局部SSIM指数组成。然而,简单的加窗会使映射矩阵出现不良的“分块”效应。为解决这问题,我们使用11*11的对称高斯加权函数作为加权窗口,标准差为1.5,且
                                                 (10)
 
的估计值表示为:
                                               (11)
                                  (12)
                               (13)
       应用这种加窗方法,映射矩阵就可展现出局部各向同性的性质。
       在这里,经过一些实验总结,我们把K1设为0.01,K2设为0.03,然后用平均SSIM指数作为整幅图像的估计质量评价:
                    (14)
其中X,Y为图像,为局部SSIM指数在映射中的位置,MN为局部窗口的数量。
 
     
四、matlab实现
  1. function [mssim, ssim_map,siga_sq,sigb_sq] = SSIM(ima, imb)
  2. % ========================================================================
  3. %ssim的算法主要参考如下论文:
  4. %Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image
  5. % quality assessment: From error visibility to structural similarity,"
  6. % IEEE Transactios on Image Processing, vol. 13, no. 4, pp. 600-612,
  7. % Apr. 2004.
  8. %  首先对图像加窗处理,w=fspecial('gaussian', 11, 1.5);
  9. %                 (2*ua*ub+C1)*(2*sigmaa*sigmab+C2)
  10. %   SSIM(A,B)=————————————————————————
  11. %              (ua*ua+ub*ub+C1)(sigmaa*sigmaa+sigmab*sigmab+C2)
  12. %     C1=(K1*L);
  13. %     C2=(K2*L);   K1=0.01,K2=0.03
  14. %     L为灰度级数,L=255
  15. %-------------------------------------------------------------------
  16. %     ima - 比较图像A
  17. %     imb - 比较图像B
  18. %
  19. % ssim_map - 各加窗后得到的SSIM(A,B|w)组成的映射矩阵
  20. %    mssim - 对加窗得到的SSIM(A,B|w)求平均,即最终的SSIM(A,B)
  21. %  siga_sq - 图像A各窗口内灰度值的方差
  22. %  sigb_sq - 图像B各窗口内灰度值的方差
  23. %-------------------------------------------------------------------
  24. %  Cool_ben
  25. %========================================================================
  26. w = fspecial('gaussian', 11, 1.5);  %window 加窗
  27. K(1) = 0.01;
  28. K(2) = 0.03;
  29. L = 255;
  30. ima = double(ima);
  31. imb = double(imb);
  32. C1 = (K(1)*L)^2;
  33. C2 = (K(2)*L)^2;
  34. w = w/sum(sum(w));
  35. ua   = filter2(w, ima, 'valid');%对窗口内并没有进行平均处理,而是与高斯卷积,
  36. ub   = filter2(w, imb, 'valid'); % 类似加权平均
  37. ua_sq = ua.*ua;
  38. ub_sq = ub.*ub;
  39. ua_ub = ua.*ub;
  40. siga_sq = filter2(w, ima.*ima, 'valid') - ua_sq;
  41. sigb_sq = filter2(w, imb.*imb, 'valid') - ub_sq;
  42. sigab = filter2(w, ima.*imb, 'valid') - ua_ub;
  43. ssim_map = ((2*ua_ub + C1).*(2*sigab + C2))./((ua_sq + ub_sq + C1).*(siga_sq + sigb_sq + C2));
  44. mssim = mean2(ssim_map);
  45. return
 

SSIM(structural similarity index),结构相似性的更多相关文章

  1. SSIM (Structural SIMilarity) 结构相似性

    公式基于样本x和 y 之间的三个比较衡量:亮度 (luminance).对比度 (contrast) 和结构 (structure). 每次计算的时候都从图片上取一个 N*N的窗口,然后不断滑动窗口进 ...

  2. python Mean Squared Error vs. Structural Similarity Measure两种算法的图片比较

    # by movie on 2019/12/18 import matplotlib.pyplot as plt import numpy as np from skimage import meas ...

  3. MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM

    今天的作业是求两幅图像的MSE.SNR.PSNR.SSIM.代码如下: clc; close all; X = imread('q1.tif');% 读取图像 Y=imread('q2.tif'); ...

  4. Paper | BLIND QUALITY ASSESSMENT OF COMPRESSED IMAGES VIA PSEUDO STRUCTURAL SIMILARITY

    目录 1. 技术细节 1.1 得到MDI 1.2 判别伪结构,计算伪结构相似性 2. 实验 动机:作者认为,基于块的压缩会产生一种伪结构(pseudo structures),并且不同程度压缩产生的伪 ...

  5. C# 中 System.Index 结构体和 Hat 运算符(^)的全新用法

    翻译自 John Demetriou 2019年2月17日 的文章 <C# 8 – Introducing Index Struct And A Brand New Usage For The ...

  6. 体验SRCNN和FSRCNN两种图像超分网络应用

    摘要:图像超分即超分辨率,将图像从模糊的状态变清晰. 本文分享自华为云社区<图像超分实验:SRCNN/FSRCNN>,作者:zstar. 图像超分即超分辨率,将图像从模糊的状态变清晰.本文 ...

  7. OpenCV进行图像相似度对比的几种办法

    转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/43853435, 来自:shiter编写程序的艺术 对计算图像相似度的方法,本文做 ...

  8. 图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCC

    update:2018-04-07 今天发现ssim的计算里面有高斯模糊,为了快速计算,先对每个小块进行计算,然后计算所有块的平均值.可以参考源代码实现,而且代码实现有近似的在里面!matlab中中图 ...

  9. 图像处理结果的度量 —— SNR、PSNR、SSIM

    衡量两幅图像的相似度: SNR/PSNR SSIM 1. SNR vs PSNR about SNR 和 PSNR MSE:mean squared error ∑x=1Nx∑y=1Ny(f(x,y) ...

随机推荐

  1. 获取ping的最短、最长、平均时间

    # -*- coding: utf-8 -*- import osimport rep = os.popen('ping 120.26.77.101') out = p.read()regex = r ...

  2. mui 监听app运行状态

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 【Spring实战】—— 6 内部Bean

    本篇文章讲解了Spring的通过内部Bean设置Bean的属性. 类似内部类,内部Bean与普通的Bean关联不同的是: 1 普通的Bean,在其他的Bean实例引用时,都引用同一个实例. 2 内部B ...

  4. 【PHP】(原创)之表单FORM的formhash校验,以TP3.2示例

    1.目的:每次表单POST提交(ajax的POST也适用)过来数据,都必须校验formhash参数是否和服务器端的一致,不一致说明重复提交或者 跨站攻击提交csrf 2.原理:参照了 KPPW 的fo ...

  5. 利用POI进行Excel的导出

    需求:将用户的违约金信息导出为excel表格格式 步骤 1. 数据库中增加按钮的值(注意上级编号要和页面隐藏域中的相等) DZ内容(页面加载时根据SJBH查询数据库内容,读取DZ字段信息并加载样式及方 ...

  6. Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别

    utf8_unicode_ci和utf8_general_ci对中.英文来说没有实质的差别.utf8_general_ci 校对速度快,但准确度稍差.utf8_unicode_ci 准确度高,但校对速 ...

  7. 网络请求框架---Volley

    去年的Google I/O大会为android开发者带来了一个网络请求框架,它的名字叫做Volley.Volley诞生的使命就是让Android的网络请求更快,更健壮,而且它的网络通信的实现是基于Ht ...

  8. 从构建分布式秒杀系统聊聊验证码 给大家推荐8个SpringBoot精选项目

    前言 为了拦截大部分请求,秒杀案例前端引入了验证码.淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让羊毛党空手而归. 验证码 那么到底 ...

  9. redis安装和配置(一)

    Redis 的官方下载站是http://redis.io/download 怎么安装 Redis 数据库呢?下面将介绍Linux 版本的安装方法 步骤一: 下载Redis 下载安装包:wget htt ...

  10. atitit.验证码识别step4--------图形二值化 灰度化

    atitit.验证码识别step4--------图形二值化 灰度化 1. 常见二值化的方法原理总结 1 1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于12 ...