3

Я работаю над проектом, который мне нужно для обнаружения функций на изображениях с помощью opencv.Как улучшить обнаружение функций в opencv

Я использую

SURF detector; 
SURF extractor; 
BFMatcher matcher; 

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

Например, система не будет работать на этом изображении:

enter image description here

По-видимому, это изображение имеет некоторую текстуру и детектор функции должен обнаружить их, но ни один элемент не обнаружен, и поэтому совпадения не генерируется.

Как я могу улучшить обнаружение этой функции?

Могу ли я использовать любую технику обработки изображений для этого?

Есть ли какой-либо другой детектор, который я могу использовать, который поможет в этой проблеме?

ответ

5

Я не использовал SURF, но использовал алгоритм ORB. И для улучшения обнаружения объектов я экспериментировал с несколькими фильтрами. Лучшие результаты, которые я получил, были с комбинацией фильтров Equalize Histogram и Fast Fourier Transform.

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

быстрого преобразования Фурье фильтра : Он разлагает изображение на его синусоидальные и косинусные компоненты. Результат преобразования, выполняемого этим фильтром, представляет изображение в частотной области, тогда как входное изображение является эквивалентом пространственной области. В изображении домена Фурье каждая точка представляет собой определенную частоту, содержащуюся в изображении пространственной области.

Я не уверен, но я думаю, что в OpenCV нет фильтра FFT, поэтому, вероятно, вам понадобится использовать другую библиотеку.

Редактировать 1: У меня есть код, но, к сожалению, он находится на Java, а не на C++. Но если вы будете применять те же фильтры, результат будет таким же. Here - документация гистограммы Eqaulize. И для применения фильтра FFT я использовал ImageJ, который является библиотекой Java. Вы можете попытаться найти что-то похожее на эту библиотеку, например this.

Edit2: код ImageJ применять FFT фильтр

import ij.plugin.filter.FFTFilter; 
... 
FFTFilter fft = new FFTFilter(); 
ImageProcessor ip = new ColorProcessor(bufImage); 
ImagePlus imgPlus = new ImagePlus(); 

imgPlus.setImage(bufImage); 

try{ 
    fft.setup(null, imgPlus); 
}catch(Exception e){e.printStackTrace();} 
fft.run(ip); 

Edit3: Ниже приведены примеры обнаруженных признаков до и после применения упомянутых фильтров.

  1. SURF без фильтра: enter image description here
  2. SURF с EH + FFT: enter image description here
  3. ОРБ с EH + FFT: enter image description here

Как вы можете видеть с помощью алгоритма SURF, там слишком много избыточной информации для выполнения сопоставления. Поэтому я предлагаю вам использовать алгоритм ORB. Кроме того, преимущества ORB заключаются в том, что он свободен в использовании, эффективен и устойчив к вращению и масштабированию изображения. Вы также можете сгладить изображение перед применением EH + FFT для обнаружения функций только по углам.

Редактировать: 0:: Я также нашел полезную информацию о БПФ. Согласно this topic FFT является эффективной реализацией DFT. Описание описано here. Это также может быть ответ четыре вопроса your.

+0

Спасибо, не могли бы вы поделиться каким-то кодом? Например, как выполнить выравнивание гистограммы на входном изображении? Или использовать БПФ? – mans

+0

Я оставил некоторые комментарии в разделе _Edit_ – andriy

+0

Спасибо, я использовал Histogramequalizer и, похоже, имеет большое значение. Как использовать БПФ? Вы фильтруете низкую частоту изображения? Например, собираетесь ли вы в домен fft, удалить некоторую частоту и вернуться в пространственный домен? Какую частоту вы удаляете? – mans

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