Nicht kategorisiert

Bildverarbeitung, lineare Dehnung und OpenCV

Bildverarbeitung, lineare Dehnung und OpenCV

Um Objekte durch Untersuchung von Bildern zu erkennen, werden verschiedene Bildverarbeitungs- und Analysetechniken angewendet. Dieser Artikel beschreibt kurz den linearen Stretchalgorithmus und seine Verwendung innerhalb von OpenCV.

Lineare Stretch -Technik kann auf Bilder angewendet werden. Kontrastverstärkung durch lineare Dehnung kann auf Bilder mit sehr niedrigen oder sehr hohen Helligkeitsschwankungen angewendet werden. Um den linearen Stretchalgorithmus anzuwenden, muss ein Bild in Graustufen umgewandelt werden, und alle 8-Bit-Pixel und seine Werte werden in das Histogramm aufgezeichnet.

Das Histogramm enthält alle 256 Grey -Levels (0 - 255) in sogenannten Behältern und jeder Pixelwert findet in dem Mülleimer statt, der mit seinem eigenen Wert dargestellt wird. Wenn das Histogramm und das Bild erstellt werden.

Die lineare Dehnung wird wie folgt auf das Histogramm angewendet:

Die vorherige Formel kann durch eine vereinfachte Version von C ++ - Code wie folgt dargestellt werden:

#Include mit dem Namespace STD; int main () const int nmin = 0; const int nmax = 255; const int omin = 60; const int Omax = 65; int space = (nmax - nmin) / (omax - omin); int Bins = (Omax - OMIN); für (int j = 0; j <= bins; j++ )   std::cout << j + OMIN << ": " << NMIN + ( j * space ) << endl;   return 0; 

KOMPILIEREN:

G ++ Mülleimer.CPP -O -Mülleimer

AUSGANG:

60: 0 61: 51 62: 102 63: 153 64: 204 65: 255 

Der obige C ++ - Code ist eine wirklich vereinfachte Version des linearen Stretchalgorithmus. Im nächsten Abschnitt werden wir die OpenCV -Bibliothek verwenden, um diese Aufgabe zu erledigen.

Mithilfe der OpenCV -Bibliothek können wir die CVNormalize -Funktion nutzen. Diese Funktion dauert mindestens fünf Argumente (Originalbild, neues Bild, Nmin, Nmax und Normalisierung). Der folgende OpenCV C ++ - Code nimmt ein Beispielbild als einzelnes Argument an. Der folgende C ++ - Code wendet die CVNormalize -Funktion auf ein Beispielbild an und erstellt Histogramm sowohl für das ursprüngliche als auch für normalisiertes Bild.

#include "cv.H "#include" HighGui.H "void create_histogram_image (iplimage*, iplimage*); int main (int argc, char ** argv) // Farbbild laden, angegeben durch das erste Argument IPlimage*source = cvloadimage (argv [1]); // Neues Bild erstellen Struktur // für das Graustufen-Ausgangsbild iplimage *Gray_img = cvcreateimage (cvsize (Quelle-> Breite, Quelle-> Höhe), IPL_Depth_8u, 1); // Setzen Sie den Typ CV_RGB2Gray, um // RGB-Bild auf Grayscale Cvcvtcolor (Quelle, Grau, Gray_img) zu setzen (Quelle, Grau, Grau, Gray_Img, Grau, Grau, Grau, Grau, Grau, Grau, Grau, Grau, Grau, Grau, Gray_img, Grau, Gray_img (Quelle, Gray_img , CV_RGB2GRAY); // neue Bildstruktur erstellen // Histogramm Bild iplimage *hist_img = cvCreateimage (cvsize (300,240), 8, 1); // Um ​​gestrecktes Ausgangsbild iplimage *Stretched_img = cvcreateimage (CVSIZE (Quelle-> Breite, Quelle-> Höhe), IPL_Depth_8u, 1); // neue Bildstruktur zu erstellen // Histogramm Bild iplimage *Stretched_hist_img = cvcreateimage (cvSimage (cvSimage) erstellen (300.240), 8, 1);CVSET (Stretched_hist_img, cvScalarall (255), 0); // Neue Bildstruktur erstellen //, um gestrecktes Ausgangsbild zu halten. // cvnormalisieren Funktionsaufruf, um lineare Stretch Cvnormalize (Gray_img, Stretched_img, 0, 255, cv_Minmax) anzuwenden; // Histogramm des Originalbildes erstellen create_histogram_image (Gray_img, hist_img); // Erstellen Sie das Histogramm des neuen Bildes. create_histogram_image (Stretched_img, Stretched_hist_img); // Alle Bilder anzeigen CVNAMEDWINDOW ("Original Grey-Scale-Bild", 1); cvshowimage ("Original graues Bild", Gray_img); cvnamedWindow ("gestrecktes graues Bild", 1); cvshowimage ("gestrecktes graues Bild", Stretched_img); cvnamedWindow ("graues Bildhistogramm", 1); cvshowimage ("graues Bildhistogramm", hist_img); cvnamedWindow ("gestrecktes Bildhistogramm", 1); cvshowimage ("gestrecktes Bildhistogramm", Stretched_hist_img); // auf unbestimmte Zeit auf Tastenanschlag Cvwaitkey (0) warten; Rückkehr 0;  void create_histogram_image (iplimage* gray_img, iplimage* hist_img) cvhistogram* hist; int hist_size = 256; Float -Bereich [] = 0,256; float* ranges [] = Bereich; float max_value = 0.0; float w_scale = 0.0#000000; ">; // Array erstellen, um Histogrammwerte Hist = cvcreatehist (1, & hist_size, cv_hist_array, Ranges, 1); // Histogrammwerte CVCALCHIST (& Gray_img, Hist, 0, Null); // Get the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the HistoRt. Minimale und maximale Werte des Histogramms cvgetminmaxhistValue (Hist, 0, & max_value, 0, 0); // Höhenhöhe unter Verwendung von Maximim-Wert cvscale (Hist-> Bins, Hist-> Bins, ((float) hist_img-> Höhe)// MAX_VALUE, 0); // Berechnen Sie die Breite w_scale = ((float) hist_img-> width)/hist_size; // Das Histogramm für (int i = 0; i; i; < hist_size; i++ )   cvRectangle( hist_img, cvPoint((int)i*w_scale , hist_img->Höhe), cvpoint ((int) (i+1)*w_scale, hist_img-> Höhe -cvround (cvgetReal1d (hist-> mutze, i))), cvscalar (0), -1, 8, 0);  

KOMPILIEREN:

g ++ 'pkg-config opencv--cflags-libs' normalisieren.CPP -o normalisieren 

AUSFÜHREN:

./Probe normalisieren.png 

AUSGANG:

Probe.PNG (Original RGB -Bild)

Im nächsten Schritt haben wir das RGB-Bild in einen grauen Maßstab umgewandelt:

Mit Cvnormalize haben wir eine lineare Dehnung angewendet:

Jetzt können wir Histogramme beider Bilder vergleichen.

Histogramm des ursprünglichen grauen Bildbildes:

Histogramm des neuen gestreckten Bildes:

Perl Hash
Perl Hash lassen Sie uns zu Paaren sehen, wie wir Perl Hash verwenden können. Zuerst müssen wir wissen, dass der Perl -Hash -Wert über den Schlüssel z...
Sicheres Online -Banking mit Linux USB Live
Zusammenfassung Das Online -Banking wird zu einer sehr beliebten Methode, um unsere Bankbedürfnisse zu befriedigen, und dies umfasst sogar Menschen oh...
userAdd- Handbuch Seite
Nennen Sie UserAdd -Erstellen Sie einen neuen Benutzer oder aktualisieren......