Создайте двоичную маску из двух строк сегментации в Python - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть две строки сегментации, которые хранятся в переменных seg1 (нижняя строка на изображении) и seg2 (верхняя строка на изображении) в виде 1-недельных массивов.Я пытаюсь создать изображение, где черный везде, кроме области внутри этих двух линий -> белый.Что я делаю, это следующее, что не работает:

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 and seg1

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Самый простой ответ, который я мог придумать, и он работает, был следующим: Учитывая im image, кривой1, кривой2 кривых:

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()
0 голосов
/ 18 февраля 2019

Используйте 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')

enter image description here

Для работы на уровне пикселейполучить индексы строк и столбцов из 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')

enter image description here

...