首页 > 解决方案 > 从掩码矩阵(连续圆)中提取边缘值

问题描述

以下代码在 2D 空间中绘制了一个圆,其中仅显示圆的边缘值。如果我有兴趣专门使用与使用当前代码显示的单元格相邻的单元格创建一个更小(或更大)的圆圈,我是否只需要更改该行的索引z = np.diff(z,axis=0)[:,1:]+np.diff(z)[1:]

我在这里意识到我可以简单地更改圆半径,cr但是在我在这个最小可重现示例之外使用的代码中,我没有明确考虑圆半径,并且在这个示例中只制作了一个圆以使事情变得更容易。有没有办法提取和可视化当前代码的边界单元格?

import numpy as np
import matplotlib.pyplot as plt
z = np.zeros((296,296))

# specify circle parameters: centre ij and radius
ci,cj=150,150
cr=90

# Create index arrays to z
I,J=np.meshgrid(np.arange(z.shape[0]),np.arange(z.shape[1]))

# calculate distance of all points to centre
dist=np.sqrt((I-ci)**2+(J-cj)**2)

# Assign value of 1 to those points where dist<cr:
z[np.where(dist<cr)]=1
z = np.diff(z,axis=0)[:,1:]+np.diff(z)[1:]
z[z!=0] = 1

# show result in a simple plot
fig=plt.figure()
ax=fig.add_subplot(111)
ax.pcolormesh(z)
ax.set_aspect('equal')
plt.show()

标签: pythonnumpymatplotlib

解决方案


推荐阅读