-
张瑶萱做图片清晰度识别 Python-爱全端
作者: admin 发布: 2019-03-23 分类:全部文章 阅读: 179次
张瑶萱做图片清晰度识别 Python-爱全端
张瑶萱 Python 做图片清晰度识别
在通常情况下,图片是否清晰是个感性认识,同一个图,有可能你觉得还过得去,而别人会觉得不清晰,缺乏一个统一的标准。然而有一些算法可以去量化图片的清晰度,做到有章可循。原理
如果之前了解过信号处理,就会知道最直接的方法是计算图片的快速傅里叶变换,然后查看高低频分布。如果图片有少量的高频成分,那么该图片就可以被认为是模糊的。然而,区分高频量多少的具体阈值却是十分困难的,不恰当的阈值将会导致极差的结果。
我们期望的是一个单一的浮点数就可以表示图片的清晰度。Pech-Pacheco 在 2000 年模式识别国际会议提出将图片中某一通道(一般用灰度值)通过拉普拉斯掩模做卷积运算,然后计算标准差,出来的值就可以代表图片清晰度。
这种方法凑效的原因就在于拉普拉斯算子定义本身。它被用来测量图片的二阶导数,突出图片中强度快速变化的区域,和 Sobel 以及 Scharr 算子十分相似。并且,和以上算子一样,拉普拉斯算子也经常用于边缘检测。此外,此算法基于以下假设:如果图片具有较高方差,那么它就有较广的频响范围,代表着正常,聚焦准确的图片。但是如果图片具有有较小方差,那么它就有较窄的频响范围,意味着图片中的边缘数量很少。正如我们所知道的,图片越模糊,其边缘就越少。
有了代表清晰度的值,剩下的工作就是设定相应的阀值,如果某图片方差低于预先定义的阈值,那么该图片就可以被认为是模糊的,高于阈值,就不是模糊的。实操
原理看起来比较复杂,涉及到很多信号啊图片处理的相关知识,下面我们来实操一下,直观感受下。
由于人生苦短,以及我个人是朋友圈第一 Python 吹子,我选择使用 Python 来实现,核心代码简单到令人发指:
import cv2def getImageVar(imgPath): image = cv2.imread(imgPath); img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) imageVar = cv2.Laplacian(img2gray, cv2.CV_64F).var() return imageVar
真是人生苦短啊,核心代码就三行,简单解释下。
import cv2 使用了一个著名的图像处理库 OpenCV,关于 OpenCV 的安装这里不多赘述,需要注意的是它依赖 numpy。
image = cv2.imread(imgPath) 使用 OpenCV 提供的方法读取图片。img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 转化为灰度图。如下图:
原图是这样的:
cv2.Laplacian(img2gray, cv2.CV_64F) 对图片用 3x3 拉普拉斯算子做卷积,这里的 cv2.CV_64F 就是拉普拉斯算子。
原理部分说过,拉普拉斯算子经常用于边缘检测,所以这里经过拉普拉斯算子之后,留下的都是检测到的边缘。上图经过这步处理之后是这样的:
可以看到这里图片人物大致还是比较清晰的。
cv2.Laplacian(img2gray, cv2.CV_64F).var() 计算出方差,并最后返回。
上面那张图按这个计算出来时 3170 多,这个就是最后我们用来判断清晰度的值。
可以再找一张看看:
原图:
做灰度和经过拉普拉斯算子之后,可以看到人物部分已经不是很清晰了。
最后算出来的方差只有 530
剩下的工作就是根据整体图片质量确定阀值了。局限性
通过上面的操作,我们知道这个方法的关键在于设置合适的阀值,阈值太低会导致正常图片被误断为模糊图片,阈值太高会导致模糊图片被误判为正常图片。阀值依赖于你实际应用的业务场景,需要根据使用场景的不同做不同的定制。
真正的银弹并不存在。除了需要定个阀值外,有些图片可能会故意做个背景模糊或者背景虚化,这种图片很容易被误杀。
比如:
计算出来是这样的,后面一大片都是黑的。
这个图前景其实看着还行,但是背景有大片的虚化和模糊,这种情况下比较容易被误杀。
所以我们常常要知其然也要知其所以然,要了解一个东西的原理与局限,根据实际场景来使用。
最后写了个简单的脚本,对传入的图片路径的图片进行计算,然后返回一个 json 字符串。
用法 python getRank.py --imgs=./1.jpg,./2.jpg
源码:原创文章,转载请注明出处!标签:
相关日志:
- 2020-11-06 汽车检测与维修技术专业【视频】8月6日南京、苏州、常州、上海、杭州双卧七日夏令营2280元-陕西腾辉国旅
- 2020-11-06 广州市地税【视频】喀什市国税局打造南疆最大网上办税体验厅-喀什电视台
- 2020-11-06 汶川大地震电影【视频】8月12日(周六)特惠!游船玩转天马岛、乘索道赏大型史诗级历史大剧《天马忠魂》-苍山风行户外
- 2020-11-06 梦醒了简谱【视频】70后一定要听的30首歌找全了,快收藏-陳大會國學文化
- 2020-11-06 常州红星美凯龙【视频】唯老村长独活 千年老树砍下做棺材,引发万蛇倾巢而出,全村皆亡-老板谈创业
我不去想,是否能够成功,既然选择了远方,便只顾风雨兼程。 我不去想,能否赢得爱情,既然钟情于玫瑰,就勇敢地吐露真诚。 我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影。 我不去想,未来是平坦还是泥泞,只要热爱生命, 一切,都在意料之中! |
- 文章归档
-
- 2020年11月 (60)
- 2020年10月 (313)
- 2020年9月 (302)
- 2020年8月 (317)
- 2020年7月 (312)
- 2020年6月 (294)
- 2020年5月 (325)
- 2020年4月 (302)
- 2020年3月 (321)
- 2020年2月 (286)
- 2020年1月 (311)
- 2019年12月 (313)
- 2019年11月 (214)
- 2019年10月 (240)
- 2019年9月 (292)
- 2019年8月 (223)
- 2019年7月 (92)
- 2019年6月 (84)
- 2019年5月 (97)
- 2019年4月 (1583)
- 2019年3月 (2194)
- 2019年2月 (360)
- 2019年1月 (386)
- 2018年12月 (206)
- 2018年11月 (306)
- 2018年10月 (328)
- 2018年9月 (291)
- 2018年8月 (312)
- 2018年7月 (311)
- 2018年6月 (294)
- 2018年5月 (318)
- 2018年4月 (302)
- 2018年3月 (317)
- 2018年2月 (282)
- 2018年1月 (324)
- 2017年12月 (326)
- 2017年11月 (300)
- 2017年10月 (319)
- 2017年9月 (299)
- 2017年8月 (303)
- 2017年7月 (149)
- 2017年6月 (86)
- 2017年5月 (98)
- 2017年4月 (81)
- 2017年3月 (97)
- 2017年2月 (86)
- 2017年1月 (90)
- 2016年12月 (107)
- 2016年11月 (101)
- 2016年10月 (101)
- 2016年9月 (84)
- 2016年8月 (92)
- 2016年7月 (94)
- 2016年6月 (92)
- 2016年5月 (108)
- 2016年4月 (90)
- 2016年3月 (92)
- 2016年2月 (85)
- 2016年1月 (93)
- 2015年12月 (102)
- 2015年11月 (98)
- 2015年10月 (92)
- 2015年9月 (84)
- 2015年8月 (91)
- 2015年7月 (86)
- 2015年6月 (97)
- 2015年5月 (92)
- 2015年4月 (81)
- 2015年3月 (94)
- 2015年2月 (81)
- 2015年1月 (90)
- 2014年12月 (102)
- 2014年11月 (95)
- 2014年10月 (92)
- 2014年9月 (100)
- 2014年8月 (101)
- 2014年7月 (90)
- 2014年6月 (106)
- 2014年5月 (99)
- 2014年4月 (65)