从掩码矩阵中提取边值(圆形问题)

Pulling edge values out of a masked matrix (circle problem)

对于矩阵大小 (296 x 296),零和一都在矩阵的中心形成一个圆形图案,是否可以仅检测和可视化圆形的边缘单元(那些与零接壤的单元格)并将 circle/edge 单元格内部和外部的所有其他值设置为零或空值?

是否有 numpy 命令可视化 transition/edge 值(?)

注意:以下不是我的代码 -- 只是我在堆栈 (Python replace zeros in matrix with 'circle' of ones) 中可以找到的最简单的最小可重现示例:

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

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

如果您的对象没有孔,这应该适用于水平和垂直边缘(固定孔也不太难):

z = np.diff(z,axis=0)[:,1:]+np.diff(z)[1:]
z[z!=0] = 1

输出: