2015-02-05 4 views
1

Я работаю над проектом, что обнаруживает гематому из кожи. У меня проблема с цветом после конвертации из RGB в HSV. Мой алгоритм обнаруживает гематому по цвету.OpenCV HSV weird преобразованный

С некоторыми изображениями у меня есть хорошие результаты, как здесь:

Оригинал IMG: http://imgur.com/WHiOWdj Результат IMG: http://imgur.com/PujbnHa

Но с некоторыми изображениями у меня есть плохой результат, как это:

Оригинал IMG: http://imgur.com/OshB99r Результат img: http://imgur.com/CuNzAId

То же оригинальное изображение после конвертации в HSV: http://imgur.com/lkVwtCs

У вас есть идеи по его устранению?

Благодаря

+0

Вы действительно думаете, что кто-то собирается, чтобы помочь вам, не показывая SRC? –

+0

да, мне не нужен точный код. Мне нужны только идеи или указания, куда идти. – User

ответ

2

Глядя на ваш результат изображения я думаю, что вы только с помощью H канала исходного изображения в вашем алгоритме. Ложное положительное обнаружение может наследовать от того, что какая-то часть здоровой кожи имеет то же значение H, что и гематома. Вы можете увидеть на изображении с четным изображением канала H, что обе части имеют одинаковые значения:

H channel of original image Разница между двумя частями - это значение насыщенности. На следующем рисунке вы можете увидеть S канал исходного изображения, и это прекрасно видно, что при гематоме насыщение значительно выше, чем в другой части руки:

enter image description here Это было ожидаемой, поскольку гематома имеет много более сильный цвет, чем у здоровой кожи.

Итак, я предлагаю вам использовать как H, так и S канал в вашем алгоритме , вам нужно учитывать только те части изображения H, где S-образ содержит высокие значения насыщения. Возможное и простое решение, чтобы сделать это, что вы бинаризацию как H и S изображений и с операцией И вы можете выполнить эту фильтрацию:

H изображение после бинаризации: enter image description here S изображений после бинаризации: enter image description here изображения после H операции & S: enter image description here вы можете видеть, что на результате только изображении гематомы часть белая (за исключением некоторого шума, но вы можете устранить, например, легко по размеру или по морфологическим filterin г).

РЕДАКТИРОВАТЬ

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

Если внешние условия (освещение, цвет объектов и т. Д.) Существенно не изменяются от изображения к изображению, вы можете использовать пороговые значения бинаризации. Если эта постоянная среда не может быть выработана, вам придется использовать более сложные методы.Есть много possibilies вы можете использовать, здесь вы можете прочитать некоторые примеры:

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

Например гистограмма канала H исходного изображения заключается в следующем: Histrogram Первый максимум принадлежит к фону, второй к коже, а последний к hematome. Можно предположить, что эти три порога можно найти на каждом изображении, только их позиции зависят от освещения или от других условий. Чтобы установить пороговое значение между 2-м и 3-м локальным максимумом, это может быть хорошим выбором для выделения гематомы.

Наконец я предлагаю Вам прочитать следующее articel о пороговом в OpenCV: OpenCV - Thresholding

+0

Вау, большое спасибо за ваш ответ. Это именно то, что я искал. Ты замечательный. Как вы сказали, я разделил изображение на HSV, и я работал только с H. if (t> = 150 && t <= 185) {tblack.at (i, j) = (uchar) 255;} вот так я искал цвет в диапазоне 150-185. Как вы думаете, как я могу смешивать эти два метода? Используйте цвет, а также bitwise_and (плоскости [0], плоскости [1], final_img) ;? Также следует использовать Adaptive Thresholding для бинаризации img? – User

+0

Я провел несколько тестов, и выяснил, что мой простой порог бинаризации (плоскости [0], img, 108, 255, THRESH_BINARY); с установленными значениями не так хороши с другими изображениями. Есть ли какой-то умный порог, который может автоматически вычислять его из входного изображения? – User

+0

Я рад, что он работает. Я отредактировал свой ответ и написал там некоторую информацию о пороговых значениях. –

 Смежные вопросы

  • Нет связанных вопросов^_^