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