Последовательность операций: 1. Определите пиксели волос 2. Проверьте пиксели волос 3. Замените пиксели волос соседними пикселями кожи.Это происходит главным образом потому, что морфологические открытые фильтры представляют собой серые или скалярные фильтры.Таким образом, проблему с цветными изображениями можно решить, либо найдя хорошее цветовое пространство (обычно жесткое при изменении фона), либо выполните закрытие (как в ответе выше: «Если волосы темные, а фон светлый)», отфильтруйте каждый канал и выполните интерполяцию.над остальными, что является текущим решением.
Таким образом, мы можем взглянуть на то, что дает matlab с тем, что упомянуто в статье, чтобы обнаружить удлиненные структуры волос:
se1 = strel('line',10,90);
se2 = strel('line',10,180);
figure, imshow(imclose(imclose(I,se1),se2),[]) % this closing is done channel wise independently.
ДляДля сложных фонов необходимо хорошее цветовое пространство.Здесь работает более или менее, так как цветное изображение упорядочено (красный> зеленый> синий или какой-то такой порядок - вы можете проверить это)
![Line filtered image](https://i.stack.imgur.com/UuZtF.png)
Теперь проблема заключается в интерполяции по отсутствующимзначения с момента закрытия оставляет некоторые артефакты.можно использовать интерполяционную медианную фильтрацию, как предложено в Lee T, Ng V, Gallagher R, Coldman A, McLean D. DullRazor: программный подход к удалению волос с изображений.Компьютеры в биологии и медицине 1997; 27: 533-543.
Другая простая идея - выполнить rgb2gray (I) -> морфологическое закрытие с использованием линейных структур -> отобразить оттенки серого на тона RGB.Обратное отображение простое, если фоновое цветовое пространство не слишком сильно меняется и является устойчивым!