我试图理解为matplotlib imshow()函数提供的矩阵值如何确定灰度模式下像素的强度.考虑示例代码:
import random
import matplotlib.pyplot as plt
import matplotlib.cm as cm
def pixels(n=3):
pixel_data = []
for _ in range(n):
row = []
for _ in range(n):
row.append(random.randint(1, 10))
pixel_data.append(row)
return pixel_data
if __name__ == '__main__':
pixel_data = pixels()
print(pixel_data)
plt.imshow(pixel_data, origin='lower', cmap=cm.Greys_r)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这里的pixel_data是3*3"矩阵":
[[7, 4, 6], [7, 7, 6], [4, 7, 9]]
Run Code Online (Sandbox Code Playgroud)
这里的值如何确定我在图像中看到的灰色阴影?
我有一张 512x512 的街道网格图像:
我想提取该图像中每条街道的折线(大蓝点 = 交叉点,小蓝点 = 沿折线的点):
我尝试了一些技巧!一个想法是首先skeletonize将街道压缩至 1 像素宽的线条:
from skimage import morphology
morphology.skeletonize(streets_data))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这存在一些间隙,破坏了街道网络的连通性;我不完全确定为什么,但我猜测这是因为有些街道在某些地方窄 1 像素,而在其他地方宽 1 像素。(更新:这些间隙不是真实的;它们完全是我展示骨架的方式的产物。有关悲伤的故事,请参阅此评论。骨架连接良好。)
我可以使用 , 来修补这些binary_dilation,但代价是使街道的宽度再次有所变化:
out = morphology.skeletonize(streets_data)
out = morphology.binary_dilation(out, morphology.selem.disk(1))
Run Code Online (Sandbox Code Playgroud)
通过重新连接的网格,我可以运行霍夫变换来查找线段:
import cv2
rho = 1 # distance resolution in pixels of the Hough grid
theta = np.pi / 180 # angular resolution in radians of the Hough grid
threshold = 8 # minimum number of votes (intersections in Hough grid cell) …Run Code Online (Sandbox Code Playgroud)