2016-06-18 13 views
1

Я использую OpenCV 3.1 и Visual Studio C++.Детектор OpenCV "Blured Corners" (C++)

Цель

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

Areas of interest

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

То, что я пытался

Я испытал Ши-Томазь углового детектора - код находится в этом учебнике http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion/good_features_to_track/good_features_to_track.html который отлично подходит для поиска областей с текстом, когда у вас есть четкие изображения. Я хотел бы найти алгоритм с использованием OpenCV, который имеет схожую (очень хорошую) производительность и может обнаруживать размытый текст. Области, где текст слишком сильно размывается (его невозможно прочитать - для обнаружения углов), следует игнорировать. Также следует игнорировать области с хорошей резкостью.

Вот пример того, что я пробовал - это результат от Ши-Томази учебник:

Это исходное изображение:

Source image

И это то, что я получаю

Results

верхние параметры изображения minDistance = 5, qualityLevel = 0.01, нижнее изображение minDistan се = 10, qualityLevel = 0,05 остальные Params одинаковы для обоих изображений:

int blockSize = 3; bool useHarrisDetector = false; double k = 0.04; 

неверный результат в том, что он не нашел размыли текст - число «195» в верхней правой области или левом нижнем углу, например «14 мс» и/или «19 мс». Скорее он нашел лучшие резкие результаты, которых я не хочу.

Я считаю, что если бы я мог использовать какое-то ядро, которое размыло бы острые области и острую размытые области, возможно, тогда детектор углов Ши-Томаси смог найти результаты.

Любые подсказки, как достичь цели?

+0

Не ожидайте большой надежности от этого случая. Принцип утилизации мусора/мусора будет применяться полностью. –

ответ

0

Я могу придумать небольшую идею, но она может быть исчерпана по производительности.

итерация через окно изображения с помощью окна (3 * 3 или большее для лучшей производительности) и в каждой итерации сделать:

  1. Размытие это окно.
  2. Вычислить cv::Norm между окном перед размытием и после размытия. Сохраните это значение где-нибудь, где для каждого окна.

Эти значения имеют свойства, которые являются:

  1. Они являются низкими, когда размытие высока.
  2. Они высоки, когда размытость низкий

Теперь пройти через эти ценности и найти значения, которые соответствуют вашим критериям.