本文概述
- 要求
- 1.安装Python依赖项
- 2.编写脚本
在本文中, 我们将向你展示如何使用Python计算两个图像之间的索引。
要求 要遵循本教程, 你将需要:
- Python 3
- 画中画3
1.安装Python依赖项 在实施逻辑之前, 你将需要安装一些将由逻辑使用的基本工具。可以使用以下命令通过PIP安装此工具:
pip3 install scikit-image opencv-python imutils
这些工具是:
- scikitimage:scikit-image是图像处理算法的集合。
- opencv:OpenCV是高度优化的库, 专注于实时应用程序。
- imutils:一系列便利功能, 使基本的图像处理功能(例如平移, 旋转, 调整大小, 构图, 显示Matplotlib图像, 分类轮廓, 检测边缘)以及使用OpenCV以及Python 2.7和Python 3更加容易。
2.编写脚本 比较图像的逻辑如下。使用Skimage度量模块的compare_ssim方法。该方法计算两个图像之间的平均结构相似性指数。它接收作为参数:
X, Y:ndarray 任何尺寸的图像。
win_size:整数或无 比较中使用的滑动窗口的边长。必须是一个奇数值。如果gaussian_weights为True, 则将其忽略, 并且窗口大小将取决于sigma。
梯度布尔型, 可选 如果为True, 则还返回相对于Y的渐变。
data_rangefloat, 可选 输入图像的数据范围(最小和最大可能值之间的距离)。默认情况下, 这是根据图像数据类型估算的。
多通道布尔, 可选 如果为True, 则将数组的最后一个维度视为通道。对每个通道独立进行相似度计算, 然后取平均值。
gaussian_weightsbool, 可选 如果为True, 则每个补丁的均值和方差在空间上均由宽度sigma = 1.5的归一化高斯核加权。
Fullbool, 可选 如果为True, 则还返回完整的结构相似性图像。
并返回:
mssimfloat 图像上的平均结构相似度。
梯度数组 X和Y之间结构相似性指数的梯度[2]。仅当渐变设置为True时才返回。
Sndarray 完整的SSIM映像。仅当full设置为True时才返回。
首先, 我们将从提供的参数中读取带有CV的图像, 并将应用黑白滤镜(灰度), 并将上述逻辑应用于这些图像。创建以下脚本, 即script.py, 并将以下逻辑粘贴到文件上:
# Usage:## python3 script.py --input original.png --output modified.png# Based on: https://github.com/mostafaGwely/Structural-Similarity-Index-SSIM-# 1. Import the necessary packagesfrom skimage.measure import compare_ssimimport argparseimport imutilsimport cv2# 2. Construct the argument parse and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-f", "--first", required=True, help="Directory of the image that will be compared")ap.add_argument("-s", "--second", required=True, help="Directory of the image that will be used to compare")args = vars(ap.parse_args())# 3. Load the two input imagesimageA = cv2.imread(args["first"])imageB = cv2.imread(args["second"])# 4. Convert the images to grayscalegrayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)# 5. Compute the Structural Similarity Index (SSIM) between the two#images, ensuring that the difference image is returned(score, diff) = compare_ssim(grayA, grayB, full=True)diff = (diff * 255).astype("uint8")# 6. You can print only the score if you wantprint("SSIM: {}".format(score))
该脚本基于@mostafaGwely在Github上的此存储库中发布的代码。该代码完全遵循存储库中声明的逻辑, 但是它消除了打印图像阈值的错误。使用以下命令使用图像运行脚本的输出:
python3 script.py --first original_image.png --second compressed_image.png
将生成以下输出(图片中的命令使用简短的参数描述-f作为– first和-s作为– second):
文章图片
该算法将打印一个字符串, 即” SSIM:$ value” , 但是你可以根据需要进行更改。如果比较两个精确的图像, 则SSIM的值显然应该为1.0。
【如何使用Python计算两个图像之间的结构相似指数(SSIM)】编码愉快!
推荐阅读
- 在Ubuntu 16.04中通过composer安装库时,如何解决”系统中缺少所需的PHP扩展名bcmath”的问题
- 如何使用JavaScript触发直接下载PDF
- 如何使用JavaScript中的网络摄像头创建实时条形码扫描仪
- 如何在Ubuntu 16.04中使用OCRmyPDF使基于图像的PDF(图像到文本)可以选择和搜索
- 如何使用JavaScript检测浏览器是否支持Webp图像格式
- 如何通过语音命令即时切换Artyom.js的语言
- 如何在Ubuntu 18.04中使用Coturn创建和配置自己的STUN/TURN服务器
- 在Ubuntu 18.04中使用Python通过音频指纹创建自己的Shazam(识别歌曲)
- Dockerfile构建LNMP分离环境部署wordpress