如何局部量化图像的“清晰度”?

信息处理 图像处理 Python 模糊
2022-01-09 01:06:33

我正在尝试量化具有一些散景(失焦背景)的图片中有多少锐度(或锐度)。

我为此使用了 Python scikit 图像。这是我天真的方法:

import matplotlib.pyplot as plt

from skimage import data
from skimage.color import rgb2gray
from skimage.morphology import disk
from skimage.filters.rank import gradient

cat = data.chelsea() # cat is a 300-by-451 pixel RGB image
cat_gray = rgb2gray(cat)

selection_element = disk(5) # matrix of n pixels with a disk shape

cat_sharpness = gradient(cat_gray, selection_element)

plt.imshow(cat_sharpness, cmap="viridis")
plt.axis('off')
plt.colorbar()

plt.show()

所以这是图片(注意背景不是焦点) 猫

这是梯度,它实际上测量了对比度的差异: 坡度

如果使用Lena 图像,这种对比度问题的差异会更加明显: 在此处输入图像描述

在这里,由于对比度的差异,背景也被捕捉到了(右上角有一个黑框)

关于如何在仅突出显示重点区域的情况下给出标量值的任何想法?

2个回答

我知道最近的作品使用了超越渐变的工具。以下是一些可以作为起点的参考资料:

本文提出了一种旨在测量图像中局部感知锐度的算法。我们的方法利用了图像的光谱和空间特性:对于每个块,我们测量幅度谱的斜率和总空间变化。然后调整这些度量以考虑视觉感知,然后通过加权几何平均值组合调整后的度量。由此产生的度量,即 S3(光谱和空间锐度),产生感知锐度图,其中较大的值表示感知更锐利的区域

清晰度是图像质量视觉评估的重要决定因素。人类视觉系统能够毫不费力地检测模糊并评估视觉图像的清晰度,但其潜在机制尚不完全清楚。现有的模糊/锐度评估算法大多基于边缘宽度、局部梯度或全局/局部高频内容的能量降低。在这里,我们从不同的角度理解这个主题,其中清晰度被识别为在复杂小波变换域中评估的独特图像特征附近的强局部相位相干 (LPC)。以前的 LPC 计算仅限于应用于在尺度空间中以三个连续的二元尺度分布的复系数。

给定的示例和不同的比较可以为您提供一些实现目标的提示。

如果你看到完整的 Lenna 图像,她会站在离镜子很近的地方(黑框是镜子的一部分,所以黑框也是焦点),这就是为什么你在计算梯度时得到那个边缘的原因。这就是为什么您要计算此特定图像中黑框的渐变的原因。

如果你需要一个通用的方法,这是我能想到的:

找到图像的最大梯度

获取近似深度图(从单个图像中提取最难的部分)

过滤与最大梯度具有或多或少相同深度的梯度。