我有一个用手机摄像头拍摄的图像,聚焦在其中的一部分上,比如说一张脸或其他任何东西。
我想知道-大约-聚焦区域在哪里。例如,聚焦区域周围的边界框。
示例:


#1 楼

通常,这是图像分割问题(​​http://en.wikipedia.org/wiki/Image_segmentation),您将尝试在其中将图像的聚焦区域与非聚焦区域隔离。

无论如何,光学透镜等效于低通滤波器,低通滤波器对信号的影响是通过限制较高的频率含量来使其平滑。

在数字图像处理中,低频对应

因此,要隔离聚焦区域,您可能正在寻找相对于标准物体具有更高标准偏差的区域。由于散焦镜头的平滑操作,模糊区域的标准偏差会降低。

要区分“模糊”区域和“非模糊”区域,可以设置“窗口”尺寸为$ M \ times N $的图片”,然后将其滑动到图片上。

在窗口的每个位置计算“补丁”值的方差,就好像它们是$ M \ x N $值的一维向量一样。这将导致另一个“图像”(或更常见的是二维数组),描述图像上每个位置的标准偏差的变化。然后,您可以收集所有这些值并获得其直方图。直方图将显示多峰分布(有关更多信息,请参见http://en.wikipedia.org/wiki/Multimodal_distribution)。

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

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

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

希望这会有所帮助。

评论


$ \ begingroup $
我将对您的答案进行深入的阅读,并提供反馈,非常感谢
$ \ endgroup $
– Humam Helfawi
15年3月26日在16:10

$ \ begingroup $
非常感谢,伟大而详尽的答案,如果我使用opencv获得了不错的结果,我将分享实现,再次感谢
$ \ endgroup $
– Humam Helfawi
2015年3月27日在6:44

$ \ begingroup $
顺便说一句,图像的灰色代表足够了吗?或者我需要处理每个通道吗?
$ \ endgroup $
– Humam Helfawi
15年3月27日在6:50

$ \ begingroup $
很高兴您发现它很有帮助。进行灰度处理可以很好地区分模糊区域和聚焦区域,但包括其他颜色信息可以帮助您指定更复杂的区域(例如,跟踪肖像中人脸的区域或仅将照片中的花朵隔离在您的帖子)。
$ \ endgroup $
– A_A
15年3月27日在8:38

$ \ begingroup $
在讨论之后,该问题被重新编辑回其原始形式:meta.dsp.stackexchange.com/questions/1337/…@ vast-academician请添加您的评论作为单独的回复。主要部分已保存在:pastebin.com/kjCC1wM6
$ \ endgroup $
– A_A
16-3-7的11:00

#2 楼

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


将图像转换为灰度(这不是必需的,但是为了清楚起见,我假设您只有一个通道)
计算两个方向的梯度
计算幅度(或仅对梯度求平方)
将两个方向上的两个梯度图像相加

如前所述,图像的聚焦部分将比非聚焦部分具有更高的频率重点区域。从总和中,您将得到两个投影,在该投影中,被聚焦对象沿该方向放置的那部分有很多变化(较高的值)。现在,您可以执行以下操作:确定这些较高值的起点和终点。您可以使用简单的阈值(例如0.7 * maximum_value)或平滑轮廓,获取二阶导数并检查其中的最大值。
上一步的开始/停止位置为您提供了沿两个方向的像素位置指示清晰度区域的矩形的放置方向。