Python图像中心凹

2024-04-29 18:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够在Python中使焦点位于图像中心的图像中心。我的输入图像可以表示为2dnumpy数组。我想得到一个中央分辨率高,但侧面模糊的输出图像。为此,我找到了一个名为logplar_interp的OpenCV函数,但它似乎没有出现在OpenCV的Python包装中。谢谢你的帮助。在

中心凹图像的示例如下所示(取自Wikipedia):

焦点是指向右上角的墓碑,而当你离开焦点时,其余像素会逐渐模糊。在


Tags: 函数图像示例分辨率像素数组wikipedia中心
1条回答
网友
1楼 · 发布于 2024-04-29 18:23:33

下面是我使用opencvpython重新创建它的尝试。这是一个相当老套的解决方案,有点计算密集,但它肯定能完成任务。在

首先,创建一个遮罩,其中0的像素对应于您希望保持高分辨率的像素,1的像素对应于您想要模糊的像素。为了简单起见,我将创建一个由深色像素组成的圆圈来定义高分辨率像素。在

有了这个掩码,我可以建议使用一个工具来实现这个功能,就是在这个掩码上使用distance transform。对于二进制掩码中的每个点,距离变换中相应的输出点是从该点到最近的零像素的距离。因此,当您冒险远离遮罩中的零像素时,距离会越大。在

因此,在这个蒙版中,离零像素越远,应用的模糊就越多。利用这个想法,我只需在图像中写一个循环,在每个点上,创建一个模糊蒙版——不管是平均值还是高斯值,或者任何与之相关的蒙版——它与距离变换中的距离成比例,然后用模糊蒙版模糊这个点。此遮罩中任何为零的值都不应应用模糊。对于遮罩中的所有其他点,我们使用遮罩中的值来指导我们收集以该点为中心的像素邻域并执行模糊处理。距离越大,像素邻域应该越大,因此模糊度越强。在

为了简化问题,我将使用平均掩模。具体来说,对于距离变换中的每个值,该掩码的大小将是M x M,其中M是:

M = d / S

d是距离变换的距离值,S是缩小{}值的比例因子,以便使平均更可行。这是因为距离变换可以变得相当大,当你远离一个零像素,所以比例因子使平均值更真实。形式上,对于输出中的每个像素,我们收集一个M x M像素的邻域,得到一个平均值并将其设置为输出。在

我们需要记住的一个复杂的问题是,当我们收集像素时,如果邻域的中心沿着图像的边界,我们需要确保我们收集图像边界内的像素,因此任何超出图像外部的位置,我们都会跳过。在

现在是时候展示一些结果了。作为参考,我使用了Camera Man图像,这是一个标准的测试图像,非常流行。如下所示:

enter image description here

我还将把蒙版设置为位于第70行和第100列,使其成为半径为25的圆。不用再多说了,下面是完整注释的代码。我让你自己来分析这些评论。在

^{pr2}$

我得到的输出是:

{2美元^

相关问题 更多 >