python 中是否存在任何现有的 code/library 图像清晰度或模糊度估计?

any existing code/library for image sharpness or blurriness estimation in python?

我想找到一些现有的 code/library 用于对正常图像进行 sharpness/blurriness 估计。 (prefer in Python) 稍后我需要比较不同算法的性能。

我有 10000 多张不同 "quality"(sharpness/blurriness) 的 MRI 扫描图像。我需要编写代码来过滤具有特定 "quality"(sharpness/blurriness) 的图像,这取决于用户。因此,我正在尝试研究医学图像的图像 sharpness/blurriness 估计。我的主管告诉我,互联网上有很多现有代码可以对正常图像进行 sharpness/blurriness 估计(也许是无参考清晰度指标)。她让我搜索它们并先在普通图像上试用它们。然后尝试了解他们的算法。 我在互联网上搜索过这个并找到了一些相关的页面。然而,其中很多已经过时了。

例如: 在 Image sharpness metric 页,

模糊检测的累积概率 (CPBD) https://ivulab.asu.edu/software/quality/cpbd

似乎不​​再有效了。我想原因是 "imread" 函数已从新的 "scipy" 库中删除。 (请看后面的代码和报错信息)我觉得以后可以试试老版本的"scipy"。但是,我想找到更多当前可用的 code/library 关于图像 sharpness/blurriness 估计。 此外,我的工作环境将在 Windows 10 或 CentOS-7.

我用 CPBD 尝试了以下代码:

import sys, cpbd

from scipy import ndimage

input_image1 = ndimage.imread('D:\Work\Project\scripts\test_images\blur1.png', mode='L')

input_image2 = ndimage.imread('D:\Work\Project\scripts\test_images\clr1.png', mode='L')

print("blurry image sharpness:")
cpbd.compute(input_image1)

print("clear image sharpness:")
cpbd.compute(input_image2)

来自 Python 3.7 shell 的错误消息(Window 10 中的 运行):

Traceback (most recent call last):
  File "D:\Work\Project\scripts\try_cpbd.py", line 1, in <module>
    import sys, cpbd
  File "D:\Program_Files_2\Python\lib\site-packages\cpbd\__init__.py", line 3, in <module>
    from .compute import compute
  File "D:\Program_Files_2\Python\lib\site-packages\cpbd\compute.py", line 14, in <module>
    from scipy.misc import imread #Original: from scipy.ndimage import imread
ImportError: cannot import name 'imread' from 'scipy.misc' (D:\Program_Files_2\Python\lib\site-packages\scipy\misc\__init__.py)

cpbd 包似乎有一段时间没有更新了。 它通过以下步骤对我有用:

编辑"D:\Program_Files_2\Python\lib\site-packages\cpbd\compute.py":

评论最后 4 行以:

#if __name__ == '__main__':

使用python代码:

import cpbd

import cv2

input_image1 = cv2.imread('blur1.png')

if input_image1 is None:
     print("error opening image")
     exit()

input_image1 = cv2.cvtColor(input_image1, cv2.COLOR_BGR2GRAY)

print("blurry image sharpness:")

cpbd.compute(input_image1)

由于 scipy.misc.imread 自 1.0.0 起已被弃用,并在 1.2.0 中被删除,我将使用 skimage.io.imread 代替(在大多数情况下这是一个直接替代)。

编辑cpbd/compute.py

中的代码
import skimage.io

input_image1 = skimage.io.imread('blur1.png')

cv2 也可以(或其他选项:imageio、PIL、...)但 skimage 往往更容易 install/use。

以下步骤对我有用: 从 C:\ProgramData\Anaconda3\Lib\site-packages\cpbd\compute.py 或您安装它的任何地方打开 compute.py。您会发现以下代码:

from scipy.ndimage import imread

替换为:

from skimage.io import imread

如果无法保存compute.py文件,则将其复制到桌面,按上述方式编辑并替换C:\ProgramData\Anaconda3\Lib\site-packages\cpbd\compute.py中的文件。

根据 Baj Mile 的回答,我做了以下操作并且对我有用。 打开 cpbd\compute.py 文件

注释行:from scipy.ndimage import imread

添加了行:import cv2

对主要部分进行了以下更改:

if __name__ == '__main__':  
    #input_image = imread(argv[1], mode='L')  
    input_image=cv2.imread(argv[1])  
    sharpness = compute(input_image)  
    print('CPBD sharpness for %s: %f' % (argv[1], sharpness))

关闭 compute.py 文件。

在主要代码中:

import cpbd
import cv2
input_image1 = cv2.imread('testimage.jpg')
input_image1 = cv2.cvtColor(input_image1, cv2.COLOR_BGR2GRAY)
cpbd.compute(input_image1)