【python】实现SIMM算法

首先需要准备灰度图片

python将彩色图片转化为灰度图片的方法:
安装PIL库

pip install pillow

彩色图片转化为灰度图片的脚本内容

from PIL import Image
I = Image.open('原始图片路径')
L = I.convert('L')
L.save("灰度图片保存路径")
# L.show("显示灰度图片")

转化的效果图


SIMM算法的python代码:

import numpy as np
from PIL import Image
from scipy.signal import convolve2ddef matlab_style_gauss2D(shape=(3,3),sigma=0.5):"""2D gaussian mask - should give the same result as MATLAB'sfspecial('gaussian',[shape],[sigma])"""m,n = [(ss-1.)/2. for ss in shape]y,x = np.ogrid[-m:m+1,-n:n+1]h = np.exp( -(x*x + y*y) / (2.*sigma*sigma) )h[ h < np.finfo(h.dtype).eps*h.max() ] = 0sumh = h.sum()if sumh != 0:h /= sumhreturn hdef filter2(x, kernel, mode='same'):return convolve2d(x, np.rot90(kernel, 2), mode=mode)def compute_ssim(im1, im2, k1=0.01, k2=0.03, win_size=11, L=255):if not im1.shape == im2.shape:raise ValueError("Input Imagees must have the same dimensions")if len(im1.shape) > 2:raise ValueError("Please input the images with 1 channel")M, N = im1.shapeC1 = (k1*L)**2C2 = (k2*L)**2window = matlab_style_gauss2D(shape=(win_size,win_size), sigma=1.5)window = window/np.sum(np.sum(window))if im1.dtype == np.uint8:im1 = np.double(im1)if im2.dtype == np.uint8:im2 = np.double(im2)mu1 = filter2(im1, window, 'valid')mu2 = filter2(im2, window, 'valid')mu1_sq = mu1 * mu1mu2_sq = mu2 * mu2mu1_mu2 = mu1 * mu2sigma1_sq = filter2(im1*im1, window, 'valid') - mu1_sqsigma2_sq = filter2(im2*im2, window, 'valid') - mu2_sqsigmal2 = filter2(im1*im2, window, 'valid') - mu1_mu2ssim_map = ((2*mu1_mu2+C1) * (2*sigmal2+C2)) / ((mu1_sq+mu2_sq+C1) * (sigma1_sq+sigma2_sq+C2))return np.mean(np.mean(ssim_map))if __name__ == "__main__":im1 = Image.open("1.png")im2 = Image.open("2.png")print(compute_ssim(np.array(im1),np.array(im2)))

总结:

  1. SSIM具有对称性。
  2. SSIM是一个0到1之间的数,越大表示输出图像和无失真图像的差距越小,即图像质量越好。当两幅图像一模一样时,SSIM=1。

【python】实现SIMM算法相关推荐

  1. python数据结构与算法总结

    python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...

  2. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

  3. 以图搜图Python实现Hash算法

    以图搜图(一):Python实现dHash算法 http://yshblog.com/blog/43 以图搜图(二):Python实现pHash算法 http://yshblog.com/blog/4 ...

  4. em算法python代码_EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

  5. Python:SMOTE算法——样本不均衡时候生成新样本的算法

    Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...

  6. Python基于聚类算法实现密度聚类(DBSCAN)计算

    本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...

  7. NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术

    NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术 导读 带你玩转python实现的语音实时识别技术(包括音频混音.回声消除.噪音滤除.杂音消除.静音检测等方法) 视频观看: 软 ...

  8. python文字识别算法_Python图像处理之图片文字识别(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几 ...

  9. Python实现kNN算法

    Python实现kNN算法 1. 原理 k-最近邻: kNN(k-NearestNeighbor)分类算法机器学习中最简单的分类方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用 ...

最新文章

  1. html状态查询爱站,批量获取爱站数据
  2. 前端学习(3093):vue+element今日头条管理-反馈
  3. 代码注释(图案:女孩儿)
  4. 小码农也有大梦想!最小公倍数java算法
  5. Oracle RMAN Catalog 和 Nocatalog 的区别
  6. how bootstrap fit into our website design?
  7. 32核心板怎么样使用stlink_终极调试工具 EventRecorder 使用方法,各种 Link 通吃
  8. 线程控制之线程和信号
  9. MATLAB 符号函数转换为数值函数?
  10. LOJ.6073.[2017山东一轮集训Day5]距离(可持久化线段树 树链剖分)
  11. Linux如何在文件中新建一行,linux – 如何使用sed将文本插入文件的第一行?
  12. 1450F The Struggling Contestant(贪心+思维)
  13. numpy中数据不以科学记数法显示
  14. ASP内置对象及其作用
  15. How to find block sql from dba_waiters v$session v$sql
  16. janusgraph源码分析1-下载编译启动 1
  17. 攻防世界 super sqli write up
  18. 在线思维导图工具百度脑图
  19. 字节byte转换为B,KB,MB,GB,TB
  20. MARVELL电力线载波通讯芯片运用于家庭联网

热门文章

  1. 在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
  2. CentOS安装Redis教程
  3. Java Exer0905 玩家1、2互相攻击,直至一方生命值小于零,战斗结束,三局两胜,公布胜方。for循环、while循环、三元运算符、if-else、Scanner
  4. Q1净亏损逾6亿美元,悬在波音头上的利剑何时落下?
  5. AES-GCM模式代码演示
  6. halcon 纹理检测_Halcon 纹理缺陷检测 apply_texture_inspection_model
  7. # SOM-算法原理
  8. 谈谈商业分析的思维养成
  9. zigbee_蓝牙_wifi的比较与区别分析
  10. eclipse Oxygen版本 安装cvs插件