簡體   English   中英

從Python中的兩條分割線創建二進制掩碼

[英]Create binary mask from two segmentation lines in Python

我有兩條分割線以1-d numpy數組形式存儲在變量seg1(圖像中的底線)和seg2(圖像中的上線)中。 我正在嘗試創建一個圖像,除了這兩行內的區域->白色之外,其他所有地方都是黑色的。 我在做什么是下面的行不通的:

binaryim = np.zeros_like(im)
for col in range(0, im.shape[1]):
    for row in range(0, im.shape[0]):
        if row < seg1[col] or row > seg2[col]: 
            binaryim[row][col] = 0
        else:
            binaryim[row][col] = 255

有任何想法嗎? 這些行內的所有內容均應為一,外部行中的所有內容應為零。

seg2和seg1

使用np.arange掩蓋行,並使用cmap='gray'繪制白色和黑色:

import matplotlib.pyplot as plt
import numpy as np

im=np.zeros((100,100)) + 0
r1, r2 = 31,41

rows = np.arange(im.shape[0])
m1 = np.logical_and(rows > r1, rows < r2)
im[rows[m1], :] = 255
plt.imshow(im, cmap='gray')

在此處輸入圖片說明

要在像素級別上工作,請從np.indices獲取行和列索引:

def line_func(col, s, e):
    return (s + (e - s) * col / im.shape[1]).astype(np.int)

r1, r2 = [20, 25], [30, 35]
rows, cols = np.indices(im.shape)
m1 = np.logical_and(rows > line_func(cols, *r1),
                    rows < line_func(cols, *r2))
im+= 255 * (m1)
plt.imshow(im, cmap='gray')

在此處輸入圖片說明

我能想到的最簡單的答案是行之有效的:給定即時影像,curve1,curve2為曲線:

rows, cols = np.indices(im.shape)
mask0=(rows < curve1) & (rows > curve2)
plt.gca().invert_yaxis()
plt.imshow(mask0,origin='lower',cmap='gray')
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM