隔离聚焦图像的非模糊部分

信息处理 图像处理 opencv 模糊
2021-12-25 12:13:23

我有一张由手机相机拍摄的图像,重点放在其中的一部分上,比如一张脸或其他什么。我想知道-大约-重点区域在哪里。例如,聚焦区域周围的边界框。例子 : 原版的 检测后

2个回答

一般来说,这是一个图像分割问题 ( http://en.wikipedia.org/wiki/Image_segmentation ),您将尝试将图像的焦点区域与非焦点区域隔离开来。

无论如何,光学镜头都相当于低通滤波器,低通滤波器对信号的影响是通过限制较高频率的内容来使其平滑。

在数字图像处理中,低频对应大物体(一般形式),高频对应小物体(细节)。

因此,为了隔离聚焦区域,您可能会寻找相对于模糊区域具有较高标准偏差的区域,而模糊区域由于失焦镜头的平滑操作而具有较低的标准偏差。

要区分“模糊”与“非模糊”区域,您可以设置尺寸为 M×N 的“窗口”并将其滑过您的图像。

在窗口的每个位置计算“补丁”值的方差,就好像它们是 M×N 值的一维向量。这将产生另一个“图像”(或更一般地说是二维数组),描述图像上每个位置的标准偏差的变化。然后,您可以收集所有这些值并获得它们的直方图。直方图将呈现多模态分布(有关更多信息,请参阅http://en.wikipedia.org/wiki/Multimodal_distribution)。

对于您帖子中的图像,直方图可能会显示两种模式。一种对应于较高的标准偏差值(聚焦区域),另一种对应于较低的标准偏差值(模糊区域)。

然后,您可以定位一个阈值,例如仅在两种模式之间,以在您的聚焦区域和非聚焦区域之间建立一个标准,然后选择标准偏差高于您的阈值的所有“补丁”(或 MxN 窗口区域)。(更多信息请参见:http ://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )

这将为您隔离图像的焦点部分。

希望这可以帮助。

这是一种更简单的方法,不涉及滑动窗口分析。

  • 将您的图像转换为灰度(这不是必需的,但为了清楚起见,我假设您只有一个通道)

  • 计算两个方向的梯度

  • 计算幅度(或只是平方梯度)

  • 在两个方向上对两个梯度图像求和

如前所述,图像的聚焦部分将具有比非聚焦区域更高的频率。从总和中,您最终会得到两个投影,其中聚焦对象沿该方向放置的那部分有很多变化(更高的值)。您现在可以执行以下操作:

  • 确定这些较高值的起点和终点。您可以使用一个简单的阈值(例如 0.7*maximum_value)或平滑轮廓,取二阶导数并检查其中的最高值。

  • 上一步中的开始/停止位置为您提供了沿两个方向放置锐化指示矩形的像素位置。