【问题标题】:any existing code/library for image sharpness or blurriness estimation in python?python中用于图像清晰度或模糊度估计的任何现有代码/库?
【发布时间】:2019-10-19 19:41:03
【问题描述】:

我想找到一些现有的代码/库,用于对普通图像进行清晰度/模糊度估计。 (首选 Python)稍后我需要比较不同算法的性能。

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

例如: 在 Image sharpness metric 页面,

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

似乎不再工作了。我猜原因是从新的“scipy”库中删除了“imread”函数。 (请看后面的代码和错误信息)我想我以后可以试试旧版本的“scipy”。但是,我想找到一些当前可用的关于图像清晰度/模糊度估计的代码/库。 另外,我的工作环境是 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)

【问题讨论】:

标签: python image algorithm metrics


【解决方案1】:

似乎 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)

【讨论】:

  • 得到错误:回溯(最近一次调用):文件“D:\Work\Project\scripts\try_cpbd_with_opencv.py”,第 1 行,在 中导入 cpbd 文件“D:\Program_Files_2 \Python\lib\site-packages\cpbd_init_.py",第 3 行,在 中 from .compute 导入计算文件 "D:\Program_Files_2\Python\lib\site-packages\cpbd \compute.py",第 14 行,在 中 from scipy.ndimage import imread #Original: from scipy.ndimage import imread ImportError: cannot import name 'imread' from 'scipy.ndimage' (D:\Program_Files_2\Python\ lib\site-packages\scipy\ndimage_init_.py) >>>
  • 后来,我评论了 cpbd 的第 14 行。然后,我收到以下错误: Traceback (last recent call last): File "D:\Work\Project\scripts\try_cpbd_with_opencv.py", line 5, in input_image1 = cv2.cvtColor(input_image1, cv2.COLOR_BGR2GRAY) cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
  • 这个错误表明图片文件没有打开,尝试在与图片相同的文件夹中执行上面的脚本,它对我来说非常有效。
  • 谢谢,我已将“D:\Program_Files_2\Python\lib\site-packages\cpbd\compute.py”编辑为“D:\\Program_Files_2\\Python\\lib\\site- packages\\cpbd\\compute.py" 然后,它工作。但是,这段代码不能很好地工作。有时,更清晰的图像具有更低的清晰度结果。也许,我需要尝试其他算法。
  • 嗯,我没有对它进行过广泛的测试,但是我测试过的几张图像效果很好,请确保将图像转换为灰度而不是黑白。用黑白色就不行了。
【解决方案2】:

由于 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 往往更易于安装/使用。

【讨论】:

    【解决方案3】:

    以下步骤对我有用: 从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中的文件。

    【讨论】:

      【解决方案4】:

      按照 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)

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 2015-04-27
        • 2020-04-25
        • 2013-07-27
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多