图像处理:模糊图像判断

news/2024/11/30 8:59:51/

目录

上期回顾

采用Laplace算子的原因

实现的效果

图片素材

代码的展示与讲解

效果展示

项目资源


上期回顾

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

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

采用Laplace算子的原因

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

实现的效果

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

图片素材

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

代码的展示与讲解

import cv2
import osdef getPhotopath(paths):imgfile = []file_list=os.listdir(paths)for i in file_list:newph=os.path.join(paths,i)imgfile.append(newph)return imgfiledef getImgVar(image):imggray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)imageVar = cv2.Laplacian(imggray, cv2.CV_64F).var()return imageVardef 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 cdef getThr():a=getTest(imgfile1)b=getTest(imgfile2)thr=(a[0],b[0])# print(thr)return thrpath1="./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" 

image="./test/01.jpg"

项目资源

GitHub:img-processing-techniques/Sharpness_evaluation/Image processing:fuzzy image judgment at main · Auorui/img-processing-techniques (github.com)

所有资源上传在了GitHub上。 


http://www.ppmy.cn/news/1508.html

相关文章

SpringBoot项目--如何不停服更新应用?

原文网址:SpringBoot项目--如何不停服更新应用?_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java后端项目如何不停机更新服务。 在生产环境中,一般都会每个服务部署多个实例。只要多于1个实例,就可以不停服更新应用。 不停服…

【从零开始玩量化13】quantstats:分析你的量化策略

背景 之前总结了一些获取量化数据的途径,数据是一个量化策略的“原材料”,接下来要考虑的问题就是如何使用这些数据。 本文,介绍一个量化指标分析工具quantstats,利用它可以很方便的分析你的策略。 Github地址:https…

Objective-C中weak实现原理

Objective-C的对象采用引用计数来管理内存,如果对象被强持有,这个对象的引用计数会增加,如果对象被弱持有,这个对象的引用计数不会增加。弱持有也就是weak如何实现的呢?首先看下weak相关底层实现用到的数据结构&#x…

使用xlsxwriter简单的将截图插入excel表格中

1.xlsxwriter插入图片 原因: 有个小项目需要测出数据,然后把仪表上截图给插入excel中。 在网上查了一下,发现用xlsxwriter插入图片挺方便的。 import xlsxwriterduang xlsxwriter.Workbook("data.xlsx") sheet duang .add_work…

用Hopper修改代理软件端口

背景 用代理软件可以访问google,但是端口经常不固定,从缺省1080变成了随机。 前几天其实已经用Hopper 3.0看了一次,但是好像不支持go,所以没反编译成功,这次换了4.0,支持了go。 Hopper与逆向 逆向的目的…

数据结构和算法之如何建立图

小白BG.1 邻接矩阵表示的图结点的结构 typedef struct GNode *PtrToGNode;//PtrToGNode是指向GNode的一个指针 struct GNode{ int Nv;//顶点数 int Ne;//边数 WeightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum];//存顶点的数据 }; typedef PtrToGNode MG…

“剧情+综艺” 助推国潮文化破圈

一舞千年,重现大唐辉煌;一曲流光,雕琢岁月模样;一纸云烟,漫卷诗书山河;跨历史长河,览盛世华章。自从河南卫视开启“剧情综艺”的晚会形式,晚会便多了一种呈现方式。 从2021年《唐宫夜…

基于JSP网上书城的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…