2016-06-18 10 views
1

Ich benutze OpenCV 3.1 und Visual Studio C++.OpenCV "Blured Corners" Detektor (C++)

Ziel

Ich möchte Ecken erkennen, nicht Kurven, Rechtecke oder Kreise. Das heißt, ich möchte die Positionen von unscharfen Zeichen finden. Hier Gebiet Gebiete mein Interesse:

Areas of interest

Die roten Bereiche haben eine höhere Priorität, weil sie verschwommener als die orangefarbene sind, die mit dem aktuellen Shi-Tomasi Ecke Detektor erfasst werden kann.

Was ich versucht habe

Ich habe getestet Shi-Tomasi Ecke Detektor - Code wird in diesem Tutorial http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion/good_features_to_track/good_features_to_track.html gelegt, die groß ist, Bereiche mit Text zu suchen, wenn Sie scharfe Bilder haben. Ich würde gerne einen Algorithmus mit OpenCV finden, der eine ähnliche (sehr gute) Leistung hat und Blured Text erkennen kann. Die Bereiche, in denen der Text zu stark verwaschen ist (es ist nicht möglich, ihn zu lesen - um Ecken zu erkennen), sollten ignoriert werden. Auch die Bereiche, die eine gute Schärfe haben, sollten ignoriert werden. Hier

ist Beispiel, was ich versucht - das ist das Ergebnis von der Shi-Tomasi Tutorial:

Diese Quelle Bild ist:

Source image

Und das ist, was ich bekommen

Results

die oberen Bildparameter minDistance = 5, qualityLevel = 0,01, das untere Bild minDistan ce = 10, Qualitätsstufe = 0,05 der Rest von params ist für beiden Bilder:

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

das falsche Ergebnis ist, dass es nicht den verwischten Text gefunden hat - die Zahl „195“ im oberen rechten Bereich oder unten links, z.B die "14 ms" und/oder "19 ms". Eher hat es die besten scharfen Ergebnisse gefunden, die nicht das sind, was ich will.

Ich glaube, wenn ich eine Art Kernel verwenden könnte, der die scharfen Bereiche verwischen und die verschwommenen Bereiche scharfstellen würde, könnte dann vielleicht der Shi-Tomasi-Ecken-Detektor die Ergebnisse finden.

Irgendwelche Tipps, wie Sie das Ziel erreichen?

+0

Erwarten Sie von diesem Fall nicht viel Zuverlässigkeit. Das Prinzip "Müll in/Müll" gilt in vollem Umfang. –

Antwort

0

Ich kann an kleine Idee denken, aber es kann Leistung-erschöpft sein.

Iterierte durch Ihr Bildfenster durch Fenster (3 * 3 oder größer für eine bessere Leistung) und in jeder Iteration tun:

  1. Blur dieses Fenster.
  2. Berechnen Sie den Wert cv::Norm zwischen dem Fenster vor dem Weichzeichnen und nach dem Weichzeichnen. Speichern Sie diesen Wert für jedes Fenster.

Diese Werte haben Eigenschaften, die da sind:

  1. Sie sind niedrig, wenn die Unschärfe hoch ist.
  2. Sie sind hoch, wenn die Unschärfe niedrig ist

nun durch diese Werte gehen und Werte finden, die Ihren Kriterien entsprechen.