如果图像的分辨率为每单位 1 像素,那么如何定义像素的“边缘”? “边缘”的概念仅在与像素本身相比分辨率增加的帧中才有意义,并且contour
如果它使用与图像本身相同的分辨率,则无法绘制任何边缘。
另一方面,当然可以提高分辨率,使得“边缘”这一概念具有意义。假设我们将分辨率提高了 100 倍,我们可以使用contour
plot.
import matplotlib.pyplot as plt
import numpy as np
k = []
for s in [2103, 1936, 2247, 2987]:
np.random.seed(s)
k.append(np.random.randint(0, 2, size=(2,6)))
arr = np.hstack([np.vstack(k)[:, :-1], np.vstack(k).T[::-1].T ])
image = np.zeros(shape=(arr.shape[0]+2, arr.shape[1]+2))
image[1:-1, 1:-1] = arr
f = lambda x,y: image[int(y),int(x) ]
g = np.vectorize(f)
x = np.linspace(0,image.shape[1], image.shape[1]*100)
y = np.linspace(0,image.shape[0], image.shape[0]*100)
X, Y= np.meshgrid(x[:-1],y[:-1])
Z = g(X[:-1],Y[:-1])
plt.imshow(image[::-1], origin="lower", interpolation="none", cmap="Blues")
plt.contour(Z[::-1], [0.5], colors='r', linewidths=[3],
extent=[0-0.5, x[:-1].max()-0.5,0-0.5, y[:-1].max()-0.5])
plt.show()
为了进行比较,我们还可以使用以下命令在同一图中绘制图像本身imshow
.