文章目录

  • 基于改进SSIM算法的图像清晰度识别
  • 1. SSIM算法流程
  • 2. SSIM算法实现
  • 3. 信息熵函数
  • 4. 图像测试流程
  • 5. 测试结果
  • 总结

基于改进SSIM算法的图像清晰度识别

转载: https://www.heywhale.com/mw/project/5f2f9ac4af3980002cb4cb87
SSIM(structural similarity) 是一种用来衡量图片相似度的指标,也可用来判断图片压缩后的质量。
SSIM由亮度对比、对比度对比、结构对比三部分组成。

在改进SSIM中,作者使用信息熵的方法来对清晰度进行计算。该算法的流程为:
(1)在ssim Function函数中先对图片进行高斯处理,然后分别对原图和高斯模糊后图片进行sobel边缘提取。
(2)计算每一小块的SSIM和信息熵大小。
(3)通过对一个图像中裁剪的所有小块,按照信息熵进行片排名,然后取Top(这里取top=10)SSIM做均值。最后 1-均值 即为清晰度得分。


1. SSIM算法流程


算法流程的代码如下所示:

import numpy as np
import math
import cv2
import urllib
import matplotlib.pyplot as pltdef img_ssimRecog(img, len_s = 11):"""图片处理:param img:  图片:param  len_s: 图片每个小块尺寸:return:"""X_org, Y_org = img.shaperes_list = []for i in range(0, int(X_org), int(X_org / len_s)+3):for j in range(0, int(Y_org), int(Y_org / len_s)+3):res_list.append(ssimFunction(img[i:i + len_s, j:j + len_s]))res_list = np.array(res_list)res_list_sort = res_list[np.lexsort(-res_list.T)]res_list = res_list_sort[:, :1]res = np.mean(res_list[:10])if res < 0.0:res = 0.0return 1 - res

2. SSIM算法实现

通过图像的均值、方差等计算SSIM函数。算法函数如下:
  
均值、方差计算函数如下:
  
  
亮度函数如下:
  
对比度函数如下:
  
结构函数如下:
  
SSIM算法函数:

def ssimFunction(img):"""ssim 算法:param img:  图片:return:"""x, y = img.shaperesEntropy = entropyFunc(img)TR = cv2.GaussianBlur(img, (5,5),3)G = cv2.Sobel(img,cv2.CV_16S,2,2)/5Gr = cv2.Sobel(TR,cv2.CV_16S,2,2)/5Ux = np.mean(G)Uy = np.mean(Gr)Vx = np.var(G)Vy = np.var(Gr)Vxy = (1 / (x * y - 1)) * np.sum((G - Ux) * (Gr - Uy))R = 255K1 = 0.03K2 = 0.01c1 = (K1 * R) ** 2c2 = (K2 * R) ** 2# -SSIMA1 = 2 * Ux * Uy + c1A2 = 2 * Vxy + c2B1 = Ux ** 2 + Uy ** 2 + c1B2 = Vx  + Vy  + c2SSIM = (A1 * A2) / (B1 * B2)return SSIM, resEntropy

3. 信息熵函数

代码如下:

def entropyFunc(img):"""熵函数:param img:  图片:return:"""res = 0tmp = [0] * 256img_list = []for i in range(len(img)):img_list.extend(map(int, img[i]))img_list_set = set(img_list)for i in img_list_set:tmp[i] = float(img_list.count(i))/ 256for i in range(len(tmp)):if (tmp[i] == 0):res = reselse:res = float(res - tmp[i] * (math.log(tmp[i]) / math.log(2.0)))return res

4. 图像测试流程

对图像进行改进SSIM算法的测试,分为三步骤:
step1:先将图片预处理裁剪
  裁剪图片视情况而定,主要结合业务需求将图片的大小裁剪成相同的尺寸,便于比较,因为我处理的大部分是新闻图片,因此将图片裁剪成512400,并将彩色图片处理灰度化;
step2: 对图像进行分块处理
  首先对图片进行分块处理,视情况而定,这里将整个图片均匀分为9块大小,每块为11
11的大小,对每块图片采用ssimFunction函数处理,计算SSIM,与传统的ssim不同的是,我增加了一步利用函数entropyFunc计算信息熵的过程。
step3: 图像清晰度测试

step1、2 图像尺寸标准化处理:

def imgPreHandle(img,img_witdth,img_height,resize_width=512,resize_height=480):"""将图片缩放到同样的尺寸:param img:  图片:param img_witdth:    图片的宽度:param img_height:    图片的宽度高度:param resize_width:  图片裁剪的宽度:param resize_height   图片裁剪的高度:return:"""# x = img_witdth# y = img_heightx,y,z = img.shapenew_pic = imgif ((x>=resize_height) & (y>=resize_width))|((x<resize_height) & (y<resize_width)):new_pic = imgelif (x<resize_height) & (y>=resize_width) :new_pic = img[:, int((y/2)-(resize_width/2)):int((y/2) + (resize_width/2))]elif (x>=resize_height) & (y<resize_width):new_pic = img[int((x/2)-(resize_height/2)):int((x/2) + (resize_height/2)), :]elif (x >= resize_height) & (y < resize_width):new_pic = img[int((x / 2) - (resize_height / 2)):int((x / 2) + (resize_height / 2)), :]new_picture = cv2.resize(new_pic, (resize_height, resize_width))if len(new_picture.shape) == 3:gray = cv2.cvtColor(new_picture, cv2.COLOR_BGR2GRAY)else:gray = new_picturereturn gray

step3 主函数,对输入图像进行清晰度测试:

if __name__ == "__main__":img_path = r"./test/d.jpg"#img = cv2.imread(img_path)img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8),-1)w, h, _ = img.shape#gray = imgPreHandle(img, w, h)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)plt.figure(figsize=(20, 10))plt.subplot(1, 2, 1)plt.imshow(gray,cmap='Greys')# add similarty score of the imagestart = time.time()score = img_ssimRecog(gray, len_s = 11)print('end:',time.time()-start) text = str(round(score,3))src = gray.copy()plt.subplot(1, 2, 2)cv2.putText(src, text, (10, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (10, 10, 10), 1)plt.imshow(src,cmap='Greys')plt.show()print('Score : {}'.format(score))

5. 测试结果


注: 130x110大小图像,win10下约50ms/次。

总结

  从结果看来,对于模糊检测有一定效果,结合具体场景可自行调节图像大小和图像切片大小,具体阈值根据实际应用进行测试获取。

基于改进SSIM算法的图像清晰度识别相关推荐

  1. 《基于改进YOLOv5的无人机图像检测算法》论文阅读

    原文链接:UAV Recognition and Tracking Method Based on YOLOv5 | IEEE Conference Publication | IEEE Xplore ...

  2. 基于改进CRNN算法的专利附图标记识别

    摘要 基于深度学习技术对机械领域的专利附图进行研究,充分发掘与利用专利附图信息,寻求专利检索的补充手段,提出一种基于改进CRNN算法的专利附图标记识别方法CRNN_Eca.将特征提取的骨干网络改为Re ...

  3. 基于连通域字符分割的流程_基于改进连通域算法的车牌字符分割方法

    基于改进连通域算法的车牌字符分割方法 朱亚萍,邱锦山,杨成忠 [摘 要] 摘要:为了解决车牌字符分割中不连通汉字分割.粘连字符分割以及 竖直边框干扰等问题,提出了一种基于改进连通域算法的车牌字符分割方 ...

  4. 基于改进SURF算法的实时视频拼接

    Journal of Image and Signal Processing Vol.04 No.04(2015), Article ID:16229,9 pages 10.12677/JISP.20 ...

  5. 基于改进MRAS算法的永磁同步电机参数辨识

    基于改进MRAS算法的永磁同步电机参数辨识 摘 要 永磁同步点电机参数辨识算法介绍 永磁同步电机数学模型 改进MRAS参数辨识算法 递推最小二乘法辨识原理 递推最小二乘法结合MRAS算法原理 仿真结果 ...

  6. 机器学习之MATLAB代码--IWOA_BILSTM(基于改进鲸鱼算法优化的BiLSTM预测算法)(十六)

    机器学习之MATLAB代码--IWOA_BILSTM基于改进鲸鱼算法优化的BiLSTM预测算法(十六) 代码 数据 结果 代码 1. %% 基于改进鲸鱼算法优化的BiLSTM预测算法 clear;cl ...

  7. 【WSN】基于改进鲸鱼算法算法实现无线传感器网络wsn节点部署优化matlab源码

    1 算法介绍 1.1 wsn模型 1.2 鲸鱼算法 鲸鱼优化算法(WOA),该算法模拟了座头鲸的社会行为,并引入了气泡网狩猎策略. 1.1 灵感 鲸鱼被认为是世界上最大的哺乳动物.一头成年鲸可以长达 ...

  8. kettle spoon判断增量更新_【论文推荐】张斌等:基于改进 SOINN 算法的恶意软件增量检测方法...

    基于改进SOINN算法的恶意软件增量检测方法 张斌1,2, 李立勋1,2, 董书琴1,2 1 信息工程大学,河南 郑州 450001 2 河南省信息安全重点实验室,河南 郑州 450001 摘要:针对 ...

  9. 【matlab】机器学习与人工智能期末课设,基于 K-means 聚类算法的图像区域分割系统

    基于 K-means 聚类算法的图像区域分割系统主要由两部分组成,分别是登录界面和主界面.用户登录模块负责用户的登录功能,用户输入账号和密码正确后,进入主界面,失败则跳出弹窗,提示用户登录失败.这是用 ...

  10. matlab tdoa aoa,基于改进最小二乘算法的TDOA/AOA定位方法.PDF

    闫雷兵,陆音,张业荣 基于改进最小二乘算法的 / 定位方法[] 电波科学学报, , ( ): : / . TDOA AOA J. 2016 31 2 394400.DOI 10.13443 .cors ...

最新文章

  1. 大豆和黄豆芽还能吃吗?
  2. 分布式应用框架 Dapr
  3. ubuntu 新增mysql用户_Ubuntu中给mysql添加新用户并分配权限
  4. android 中LayoutInflater 的使用
  5. spring定时任务执行两次的原因与解决方法
  6. Html5简单描述(优点与缺点)
  7. c语言编程实现合取析取,C++实现离散数学求主合取范式和主析取范式
  8. 关于vue、js连接打印机
  9. nodeJs 实现邮箱验证码注册
  10. 安卓平台模拟软件绑定的手机(号码)以及地理位置
  11. 看完此文再不懂区块链算我输,用Python从零开始创建区块链
  12. 怎么把图片的边缘弄圆_ps边缘圆滑-怎么把抠出来的图边缘修圆滑?
  13. 图像mnf正变换_最小噪声分离(MNF)
  14. xml与json互转 C语言实现,通过json-lib、jdom及xom定义XML和JSON格式处理工具类实现xml和json间相互转换...
  15. 笔记本电脑如何锁定计算机,笔记本电脑怎么锁定关闭触摸板
  16. 自媒体素材采集平台,素材采集方法都有这些
  17. [渝粤教育] 山东大学 英语话中华 参考 资料
  18. 黑中介的天堂,乱象丛生的租房APP
  19. Unity 将经纬度变为Unity中的坐标
  20. matlab 爱,matlab

热门文章

  1. 如何在电脑上给视频去水印
  2. SIM900A—发送、接收中英文短信
  3. 浏览器插件镜像下载地址
  4. 7-Zip下载|7-Zip下载
  5. 使用layui实现表格制作
  6. sunlight的中文_Diana Vickers的Sunlight中文歌词。
  7. [技术交流]一些技术网站推荐。金融IT。
  8. 海康威视错误代码0xf_海康威视网络摄像机客户端 实例源码(基于SDK)
  9. 技术交底书(三)-----一种虚拟现实共享及三维空间共享系统
  10. spring5、springboot和springcloud的区别