алгоритм порогового значения поиска

#python #image #opencv #image-processing #threshold

Вопрос:

В настоящее время я работаю над проектом. Я должен отделить элементы образов, которые у меня есть. На первом изображении вы видите гистограмму одного из них. Я хочу вычислить порог, но не могу найти метод вычисления порога, который позволил бы мне иметь порог около 135 (это более или менее идеальный порог, но я не хочу использовать фиксированный порог). Эта гистограмма сделана на зеленом канале, потому что на ней легче идентифицировать эти цвета (любая другая идея приветствуется). И второе изображение является примером полученного изображения. введите описание изображения здесь
введите описание изображения здесь

Заранее спасибо

Комментарии:

1. значит, вам нужно отделить бледные участки от розовых?

2. Я думаю, что это выиграло бы от операции маскировки. выберите все пиксели, которые не являются черными, поместите их в один массив (вектор строки или столбца). используйте для этого numpy. затем запустите какой-нибудь автоматический порог (otsu?) для этого… чтобы получить пороговое значение, которое вы затем примените к исходному изображению в другом (фиксированном) пороге.

3. @ChristophRackwitz Как я могу это сделать? Значение по умолчанию в массиве равно 0, поэтому, даже если я скопирую, у меня все равно будет черная сторона. Можете ли вы показать мне, как это сделать?

4. набросок: mask = (im != 0).any(axis=2); selection = im[mask]; (the_threshold, _) = cv.threshold(selection, ...); thresholded = cv.threshold(im, the_threshold, ...)

5. @cedrik24 Как ты в итоге это сделал?

Ответ №1:

Вариант 1:

  1. прежде всего, мы хотим устранить черный цвет, поэтому, используя гистограмму, мы получаем общее количество пикселей от 0 до 50 (например). = DarkPixelsCount
  2. затем мы начинаем считать пиксели, начиная с 255, и накапливаем общее количество = LighPixelsCount
  3. начиная с 255 мы проверим if (LighPixelsCount >= (90% of (TotalPixelsCount - DarkPixelsCount)) , когда это условие будет выполнено, тогда это хорошая пороговая точка.

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

Вариант 2:

  1. Используйте гамма-коррекцию с очень высоким значением (например, 6,99).
  2. затем выберите высокий порог (например, 213)

результат

Вариант 2 Результат