Отметка точки интереса на изображении с помощью С++

У меня есть растровое изображение, подобное этому

введите описание изображения здесьМое требование состоит в том, чтобы создать графический интерфейс для загрузки изображения и для изменения контраста и других вещей на изображение и алгоритм для обозначения определенной области серебристым цветом, как показано на рис., с использованием С++ или С#. Я новичок в обработке изображений, и в ходе поиска я обнаружил, что могу использовать гистограмму изображения для поиска требуемой области. .Это шаги.

  • Получить гистограмму
  • Поиск разницы интенсивности
  • Поиск разрыва в строке

Может ли кто-нибудь предложить мне, как я могу действовать отсюда. Могу ли я использовать Opencv для этого или доступны какие-либо другие эффективные методы ..?

ПРИМЕЧАНИЕ:

введите здесь описание изображенияНа этом изображении много ярких точек, и алгоритм блоба не работает. Любые другие предложения для получения правильных координат прямоугольного объекта.

Спасибо


person ShivShambo    schedule 07.05.2012    source источник


Ответы (3)


OpenCV должен работать.

  1. Преобразуйте исходное изображение в оттенки серого.
  2. adaptiveThreshold преобразует его в черно-белый
  3. Обнаружение функций содержит целый список детекторов функций OpenCV; выберите один в зависимости от конкретной функции, которую вы пытаетесь обнаружить.

Например. взгляните на Simple Blob Detector, в котором перечислены основные необходимые шаги. Ваш серебряный прямоугольник, безусловно, квалифицируется как «простая капля» (без отверстий или других сложных элементов).

person MSalters    schedule 08.05.2012
comment
@MSalters .. Я успешно использовал обнаружение блоба и адаптивный порог для темного изображения ... Но у меня есть похожее на это изображение при дневном свете. Но у меня возникают некоторые проблемы с использованием алгоритма blob. - person ShivShambo; 14.05.2012
comment
Я разместил свое изображение в вопросе - person ShivShambo; 14.05.2012
comment
@lakshmikant: О, это просто шум. bilateralFilter должен удалить это. - person MSalters; 14.05.2012
comment
Спасибо. Я пробовал это раньше, но получаю необработанное исключение. Я использовал cvSmooth (pic1, pic2, CV_Bilateral). - person ShivShambo; 14.05.2012

Если все ваши картинки выглядят так, то мне кажется не составит труда сегментировать серебряную область и найти ее центр. В основном вам нужно будет применить эти алгоритмы в следующей последовательности:

  1. Я бы предложил бинаризировать изображение с помощью алгоритма адаптивного порога Otsu.
  2. Применение алгоритма маркировки (блобов)
  3. Если у вас есть проблемы с шумом, вы можете использовать открывающий фильтр или медиану перед алгоритмом блоба.
  4. Если у вас останется только одна капля (с наибольшей площадью, я думаю), используйте алгоритм моментов, чтобы найти его центр масс. Тогда у вас есть координаты X, Y, которые вы ищете

Эти алгоритмы являются классической обработкой изображений, думаю, найти их тогда будет несложно. В любом случае, они могут быть реализованы на C#, и я могу опубликовать их здесь, если вы считаете, что они решают вашу проблему.

person Andres    schedule 08.05.2012
comment
@Andres .. не могли бы вы опубликовать код C #, который вы сделали. Я думаю, это будет полезно для меня. - person ShivShambo; 23.05.2012

Может быть исследование Directshow, мультимедийного фреймворка от Microsoft, поможет вам выполнить вашу задачу.

person MACMAN    schedule 07.05.2012
comment
@Gijo.. Спасибо. Я хочу найти координаты (x, y) центра области. Есть ли другой способ, который я могу реализовать только с помощью Visual Studio 2010. - person ShivShambo; 07.05.2012