Как выделить коричневые пиксели на изображении.tiff и вычислить площадь или их количество в Python?
import numpy as np
import scipy
import pylab
import pymorph
import mahotas
from scipy import ndimage
image = mahotas.imread('img.tiff')
pylab.imshow(image)
pylab.show()
Я хочу выбрать (порог) коричневые пиксели (сосуды) на медицинском изображении и вычислить область, которую они представляют. Как я могу сделать это в Python, как в Matlab или C++? Есть ли хорошие примеры, которые я не смог найти?
Спасибо
1 ответ
Я не знаю, каково ваше правило для "коричневого", но, вероятно, это что-то вроде этого (в цветовом пространстве RGB):
0.5 <= r < 0.75 and 0.25 <= g < 0.375 and b < 0.1
ndimage
это просто трехмерный массив пикселей, где третьим измерением является цветовая плоскость. Другими словами, для изображения RGBA, image[0, 0, 0]
это красное значение для пикселя (0, 0)
, image[0, 0, 1]
это зеленое значение для пикселя (0, 0)
, так далее.
Итак, вы получили бы массив пикселей. Вы хотите посчитать все пиксели, которые соответствуют этому правилу. Вам не нужны никакие специфические для изображения функции для этого. Просто используйте свой любимый numpy
механизм применения функции ко всем плоскостям в каждой строке и столбце, чтобы получить массив 2x2 bools. Например:
browns = ((image[:,:,0] >= 0.50) & (image[:,:,0] < 0.75) &
(image[:,:,1] >= 0.25) & (image[:,:,1] < 0.375) &
(image[:,:,2] < 0.1))