Python图像处理之模糊图像判断

作者:夏天是冰红茶 时间:2022-02-24 23:34:00 

上期回顾

上一次的图像清晰度评价没有成功,主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解,不同的场景灰度的明暗不同,梯度可能会很大,无法得到一个界定值来判定图像的清晰度,所以这次我打算只对动态模糊的图像进行判断,是否是动态模糊图像。

图像处理:图像清晰度评价

采用Laplace算子的原因

根据我之前的一个调研,在清晰度评价函数当中,我决定采用Laplace算子,因为它所得到的梯度值较小,容易获得一个模糊判断区间,而其他的几种所获得的梯度值较大,相应的误差范围也将更高,而且在opencv当中就集成了Laplace算子,很轻松就能调用,并得到一个很好的结果。

实现的效果

本次将会使用一组模糊图像和一组标准图像获得模糊判定区间(a,b),我们知道梯度值越大,图像越清晰,所以当我们进行测试一张图像时,它所返回的梯度值小于a,则可以说明它是一个模糊的图像,当返回的梯度值大于b时,则可以说明它是一个清晰的图像,而当返回的梯度值落在了a与b之间,我们也将其放在模糊图像当中。

图片素材

我自己采用的是手机拍摄的照片,分辨率都是1280*960,请注意图像的尺寸与场景会影响返回的梯度值,但我们通常采集的数据都是由相机拍摄,尺寸相同,工业上采用道路裂缝检测的场景基本类似,所以有研究的意义。

代码的展示与讲解

import cv2
import os

def getPhotopath(paths):
   imgfile = []
   file_list=os.listdir(paths)
   for i in file_list:
       newph=os.path.join(paths,i)
       imgfile.append(newph)
   return imgfile

def getImgVar(image):
   imggray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
   imageVar = cv2.Laplacian(imggray, cv2.CV_64F).var()
   return imageVar

def getTest(imgfile):
   c = []
   for i in imgfile:
       # print(i)
       img=cv2.imread(i)
       image=getImgVar(img)
       # print(image)
       c.append(float(f"{image:.3f}"))
   if 'test' in imgfile[0]:   #对测试集数据进行反转
       c.sort(reverse=True)
   else:
       c.sort()
   return c

def getThr():
   a=getTest(imgfile1)
   b=getTest(imgfile2)
   thr=(a[0],b[0])
   # print(thr)
   return thr

path1="./test"     #测试的数据集文件夹位置
path2="./Standards"  #标准图的数据文件夹位置
#获取文件下的名称
imgfile1=getPhotopath(path1)
imgfile2=getPhotopath(path2)

#获得阈值
minThr,maxThr=getThr()
print(minThr,maxThr)

def vagueJudge(image):
   img = cv2.imread(image)
   imgVar = getImgVar(img)
   if imgVar>maxThr:
       cv2.putText(img, f"Not Vague{imgVar:.2f}", (12, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                   (255, 0, 0), 3)
   else:
       cv2.putText(img, f"Vague{imgVar:.2f}", (12, 70), cv2.FONT_HERSHEY_PLAIN, 3,
                   (255, 0, 0), 3)
   cv2.imshow("img",img)
   k=cv2.waitKey(0) & 0xFF
image="./Standards/001.jpg"   #需要进行测试的图片
vagueJudge(image)
getPhotopath函数:获得文件夹下各个图片路径,输入模糊图片的文件夹,输入标准图像的文件夹,存入列表当中。
getImgVar函数:返回图像梯度值。
getTest函数:对每个图像进行了梯度值计算后,存入列表当中,对模糊图像的进行列表序列翻转。
def getThr函数:获得模糊判定区间(a,b)。
vagueJudge函数:对新输入的图像进行模糊判定,只要小于b,就判定为模糊。

效果展示

由于我不想在拍摄新的图片,这里就采用./test文件和./Standards文件的图片。

控制台打印的模糊判定区间:

4.327 65.401

image="./Standards/001.jpg" 

Python图像处理之模糊图像判断

image="./test/01.jpg"

Python图像处理之模糊图像判断

项目资源

GitHub链接

来源:https://blog.csdn.net/m0_62919535/article/details/128061017

标签:Python,模糊,图像
0
投稿

猜你喜欢

  • set rs=server.CreateObject("adodb.recordset") 的中文详细说明

    2011-03-06 11:21:00
  • Golang 使用http Client下载文件的实现方法

    2023-07-21 07:32:23
  • SQL0290N表空间状态问题:停顿的独占处理

    2008-12-26 17:24:00
  • MySQL安全问题的一点心得

    2009-01-07 16:13:00
  • oracle中存储函数与存储过程的区别介绍

    2023-07-12 23:40:15
  • jQuery 横向滚动图片

    2009-03-11 13:09:00
  • 用色彩打造专业的视觉效果

    2010-09-25 19:04:00
  • php中iconv函数使用方法

    2023-06-12 08:11:07
  • SQL 2008邮件故障排除:发送测试电子邮件

    2008-12-02 14:28:00
  • php mysql PDO 查询操作的实例详解

    2023-11-14 18:32:28
  • php判断输入不超过mysql的varchar字段的长度范围

    2023-11-14 12:02:10
  • FCKeditor编辑器实战技巧

    2007-10-08 21:13:00
  • php使用pthreads v3多线程实现抓取新浪新闻信息操作示例

    2023-10-12 19:21:46
  • WEB2.0网页制作标准教程(2)什么是名字空间

    2007-11-13 13:04:00
  • 多语言网站开发 不完全技术分析

    2008-02-18 12:52:00
  • 如何在pyqt中实现全局事件实战记录

    2023-07-01 02:25:46
  • 小结下dom节点操作

    2011-03-08 10:33:00
  • 彻底删除thinkphp3.1案例blog标签的方法

    2023-11-21 12:01:01
  • php线性表顺序存储实现代码(增删查改)

    2023-11-19 06:51:53
  • php 查找数组元素提高效率的方法详解

    2023-11-15 02:51:08
  • asp之家 网络编程 m.aspxhome.com