Изображение Сравнение логотипов

Я делаю проект для Android, в котором мне нужно обнаружить логотип (логотип может иметь разный контраст, оттенок или насыщенность), для этого я использую сравнение гистограмм OpenCV-2.3.1 для Android.

Шаги, которые я выполняю, следующие:

1) Рассчитать значение истории сохраненного изображения

private List<Integer> histSize;
   private List<Float> ranges;


  histSize.add(50);
    histSize.add(60);
    histSize.add(10);

    ranges.add(0f);
    ranges.add(256f);

    ranges.add(0f);
    ranges.add(180f);

    ranges.add(0f);
    ranges.add(256f);

    channels.add(0);
    channels.add(1);
    channels.add(2);


hsv_base1=new Mat();
Imgproc.cvtColor(image1,hsv_base1, Imgproc.COLOR_BGR2HSV);
hsv_base.add(hsv_base1);
Imgproc.calcHist(hsv_base, channels,new Mat(), hist_base, histSize, ranges,false);

2) Затем я обрезаю захваченное изображение каждый кадр. Размер обрезанного изображения точно такой же, как у сохраненного изображения, и значение его гистограммы рассчитывается с использованием того же метода, что и выше.

3) Сравнение сохраненного значения истории обоих изображений

double base_test2 = Imgproc.compareHist(hist_base1,hist_baseCamera1,Imgproc.CV_COMP_CHISQR);

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

Так что теперь я планирую использовать некоторые другие методы сравнения гистограмм. Мой логотип состоит из круга.

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

Или любой другой метод, который я должен использовать, или я могу играть с сохраненным значением каналов, диапазонов, histSize?

Раньше я использовал сопоставление шаблонов, это очень медленно и довольно сложно для изображений одинакового размера.

Я был бы признателен за любой свет по этому поводу.


person user1249358    schedule 21.03.2012    source источник


Ответы (1)


Наверняка есть и другие методы. На самом деле сравнение гистограмм — это очень расплывчатый выбор метода, как вы уже поняли. (Множество изображений могут иметь одну и ту же гистограмму, как показано на рисунке ниже)

Примерно созданная де- и реконструкция изображения в оттенках серого

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

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

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

Конечно, вам нужно будет найти обертки для версии OpenCV для Android.

P.S. Не забудьте указать среду, язык программирования и платформу в тегах.

person Sonaten    schedule 21.03.2012
comment
Сегментация кажется лучшим вариантом. Хотя я никогда не реализовывал сегментацию в openCv, я попробую это. - person user1249358; 22.03.2012