Бинаризованное изображение в оттенках серого содержит слишком много шума - PullRequest
0 голосов
/ 02 февраля 2019

У меня в настоящее время есть цифровое изображение патологии, подобное этому:

enter image description here

Сначала я превращаю изображение в оттенки серого, используя следующие коды:

img=imread('DigitalPathology8.png');
figure;
imshow(img)
hsv=rgb2hsv(img); 
s=hsv(:,:,2); 

И я получил это изображение в градациях серого: enter image description here

Пока я пытаюсь преобразовать в бинаризацию это изображение в градациях серого, используя следующие коды:

bw = imbinarize(s,'global'); 
figure
subplot(2,1,1)
imshow(s)
subplot(2,1,2)
imshow(bw)

Iполучилось изображение вот так: enter image description here Что не так с моими кодами?Когда я применил тот же алгоритм к другим изображениям, как это: enter image description here, я мог получить бинаризованное изображение, в котором только синие ячейки белые, а другие ячейки, включая фон, черные.Поэтому я также ожидаю того же результата после применения тех же кодов к первому изображению, которое я упомянул.Может ли кто-нибудь помочь мне?enter image description here

1 Ответ

0 голосов
/ 03 февраля 2019

Вам лучше использовать rgb2gray() (смотрите здесь) для конвертации:

grey=rgb2gray(img)

Это должно дать вам что-то вроде этого:

Image converted to grayscale

Вместо глобального определения порога я бы порекомендовал более сложные методы, такие как Otsu , которые позволят вам получить гораздо лучшие результаты:

Thresholded image

Однако, если вы хотите извлечь только синие ячейки вместо простой версии с пороговым значением вашего изображения, вы должны использовать совершенно другой подход, такой как MaxEntropy, в изображении в градациях серого.Это даст вам что-то вроде этого:

First image thresholded

и это

Second image thresholded

Этот метод трешолдинга, по-видимому, не включен в matlab, но можно найти плагин .

Вы также можете попробовать совершенно другой подход для обнаружения синих точек с помощью порогового определения на основе сходство цветов : При таком подходе вы устанавливаете каждый пиксель в белый цвет, который имеет цветовое расстояние до синего цвета, которое меньше заданного порогового значения.Это должно дать вам что-то вроде этого (красные метки обозначают передний план изображения):

Контрольный цвет: Image of the reference color

Thresholding by color distance

Для этого подхода я взял цвет RGB (17,3,32,5,54,5) в качестве эталонного цвета, мое максимальное расстояние было 210. Если у вас есть ImageJ, вы можете использовать этот подход интерактивно, некоторое время назад я написал *Плагин 1055 * для этого . Как видите, этот подход также обнаруживает неправильные ячейки, что вызвано высоким значением расстояния и выбранным эталонным цветом.Эти ошибки можно минимизировать, выбрав более подходящий эталонный цвет и меньшие значения расстояния.

...