回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试创建反走样(加权而非布尔)的圆形掩模,以制作用于卷积的圆形核。在</p>
<pre><code>radius = 3 # no. of pixels to be 1 on either side of the center pixel
# shall be decimal as well; not the real radius
kernel_size = 9
kernel_radius = (kernel_size - 1) // 2
x, y = np.ogrid[-kernel_radius:kernel_radius+1, -kernel_radius:kernel_radius+1]
dist = ((x**2+y**2)**0.5)
mask = (dist-radius).clip(0,1)
print(mask)
</code></pre>
<p>输出是</p>
^{pr2}$
<p>那我们就可以了</p>
<pre><code>mask = 1 - mask
print(mask)
</code></pre>
<p>为了得到</p>
<pre><code>array([[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0.39, 0.84, 1. , 0.84, 0.39, 0. , 0. ],
[0. , 0.39, 1. , 1. , 1. , 1. , 1. , 0.39, 0. ],
[0. , 0.84, 1. , 1. , 1. , 1. , 1. , 0.84, 0. ],
[0. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 0. ],
[0. , 0.84, 1. , 1. , 1. , 1. , 1. , 0.84, 0. ],
[0. , 0.39, 1. , 1. , 1. , 1. , 1. , 0.39, 0. ],
[0. , 0. , 0.39, 0.84, 1. , 0.84, 0.39, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])
</code></pre>
<p>我现在可以用循环滤波和循环滤波。在</p>
<p>注意:半径可以是十进制。例如:<code>get_circular_kernel(0.5,(5,5))</code>应该给出</p>
<pre><code>array([[0. , 0. , 0. , 0. , 0. ],
[0. , 0.08578644, 0.5 , 0.08578644, 0. ],
[0. , 0.5 , 1. , 0.5 , 0. ],
[0. , 0.08578644, 0.5 , 0.08578644, 0. ],
[0. , 0. , 0. , 0. , 0. ]])
</code></pre>
<p><strong>我想在<code>kernel_size</code>固定和{<cd3>}变化的情况下,至少生成一百万个这样的</strong>,那么有没有更好或更有效的方法来实现这一点?(可能没有昂贵的操作,如sqrt,仍然保持足够精确的弧积分,即曲线在特定像素覆盖的面积?)在</p>