Почему класс ConnectedThresholdImageFilter не маркирует пиксели в пределах порога?

Я пытаюсь использовать класс ConnectedThresholdImageFilter для сегментирования "C", выглядящего белой областью двоичного изображения ("slice87.jpg"). Идея состояла в том, чтобы выбрать начальное значение, которое находится в пределах области, и добавить только соседние пиксели, которые также имеют интенсивность 255 (между пороговыми значениями от 254 до 256).

Slice87.jpg

Однако мой код приводит к изображению с каждым пикселем, установленным в 0:

введите описание изображения здесь

Вместо этого (отредактировано вручную через фотошоп):

введите описание изображения здесь

Мое начальное значение было (х, у) = (115,35). img.GetPixel(115,35) возвращает 255

import SimpleITK as sitk

img = sitk.ReadImage('slice87.jpg')
seeds = [(115,35)]

output = sitk.ConnectedThreshold(image1=img,
                                 seedList = seeds,
                                 lower = 254,
                                 upper = 256,
                                 replaceValue = 255)
sitk.WriteImage(output, 'output.jpg')

1 ответ

Решение

Какой тип вашего входного изображения img? Я подозреваю, что это типа sitkUInt8, в этом случае значение 256 не может быть представлено как тип пикселя входного изображения, и оно вызывает переполнение целых чисел. Нижний и верхний параметры образуют замкнутый интервал, который включает указанные границы. Вы должны указать upper параметр как 255 или Cast ваше изображение другого типа пикселей.

Другие вопросы по тегам