Sie sind auf Seite 1von 33

Ausarbeitung des Praktikums fr das Fach Signal- und Bildverarbeitung

Betreuer: Studiengang: Prof. Dr. Dietmar Brck Master Mechatronik / Sensortechnik Masterstudiengang

Datum der Abgabe: 2. Mrz, 2012 Autoren: Gonzalo Aceves B.Sc. Dipl.-Ing. Sargon Youssef 3568709 3406644

Inhalt
Einleitung................................................................................................................................................. 3 Unsere Bildverarbeitungssoftware.......................................................................................................... 4 1. Binre LUT ....................................................................................................................................... 5 2. Quadratische LUT ................................................................................................................................ 6 3. Wurzelfunktion LUT............................................................................................................................. 8 4. Lineare Skalierung ............................................................................................................................... 9 5. Kontrastnormierung .......................................................................................................................... 11 6. Addition mit Absolutwert .................................................................................................................. 13 7. Addition mit negativem Clipping ....................................................................................................... 14 8. Subtraktion mit Absolutwert ............................................................................................................. 15 9. Subtraktion mit positivem Clipping ................................................................................................... 16 10. Glttungsfilter ................................................................................................................................. 17 11. Kantenfilter...................................................................................................................................... 23 Fazit ................................................................................................................................................... 33

Seite 2 von 33

Einleitung
Im Zuge der Vorlesung Signal- und Bildverarbeitung gab es die Mglichkeit, das theoretisch erlernte Wissen mittels eines 3-tagigen Praktikums praktisch anzuwenden. Zur Verfgung steht das Skript Automatisierungstechnisches Praktikum II / Industrielle Bildverarbeitung. Die Durchfhrung des Praktikums erfolgte mit der Entwicklungsumgebung Microsoft Visual Studio 2008 C++ und der MFC von Microsoft. Des Weiteren stand die Software-Plattform Common Vision Blox zur Verfgung. Weitere Informationen finden sich in dem Skript Automatisierungstechnisches Praktikum II / Industrielle Bildverarbeitung und den darin enthaltenen Literaturhinweisen.

Seite 3 von 33

Unsere Bildverarbeitungssoftware
Die Aufgabenstellungen im Praktikumsskript dienen als Vorlage der Funktionen der Bildverarbeitungssoftware. Insgesamt wurden 14 Teilfunktionen in der Software implementiert, wie folgt:

1. 2. 3. 4. 5. 6. 7.

Binre LUT Quadratische LUT Wurzelfunktion LUT Lineare Skalierung Kontrastnormierung Addition mit Absolutwert Addition mit negativem Clipping

8. 9. 10. 11. 12. 13. 14.

Subtraktion mit Absolutwert Subtraktion mit positivem Clipping Glttungsfilter Kantenfilter User-Filter Histogramm Statistiken

2 4

13 3

14

5 10 11

12 6 8
Abbildung 1

7 9

Seite 4 von 33

1. Binre LUT
Die Bildverarbeitungssoftware soll ein Eingangsbild mit Hilfe einer LUT in ein Binrbild umwandeln. Hierfr werden die Grauwerte mit einem Schwellwert verglichen. Ist der Grauwert an einer Stelle im Bild kleiner als der Schwellwert, wird dieser Grauwert auf 0 gesetzt. Ist der Grauwert an einer Stelle im Bild grer als der Schwellwert, wird dieser Grauwert auf 255 gesetzt. Mit Hilfe des Schwellwertes wird eine LUT (binLUT*i+) erzeugt. Die erzeugte LUT wird an die Funktion LUT8 bergeben. Abbildung 2 zeigt das Ergebnis nach Anwendung der Operation Binre LUT. Das Ausgangsbild besteht nur noch aus den vorgegebenen Grauwerten 0 und 255. Dies erkennt man auch an dem Histogramm, welches lediglich zwei Peaks an den Stellen 0 und 255 besitzt.

Abbildung 2

void CLUT_BinrDlg::OnBnClickedAusfuehren() { IMG ErgImage; HRESULT Result; TLUT8 binLUT; int i; long InPlane = 0; //LUT fllen //Alle Werte unterhalb m_iSchwellwert = 0 for(i=0; i<m_iSchwellwert; i++) binLUT[i] = (char)0; //Alle Werte unterhalb m_iSchwellwert = 0 for(i=m_iSchwellwert; i<= 255; i++) binLUT[i] = (char)255; //Aufruf von LUT8 //Gefllte LUT auf Eingngsbild anwenden Result = LUT8((IMG)m_cvImg.GetImage(), InPlane, binLUT, (IMG)ErgImage); //Prfung auf korrekten Rckgabewert if( Result == 0) {

Seite 5 von 33

m_cvDispOUT.SetImage((long)ErgImage); m_cvDispOUT.Refresh(); } UpdateData(FALSE); //Speicher fr ErgImage while(RefCount(ErgImage) > 1) ReleaseObject(ErgImage); //Statistikfelder aktualisieren CLUT_BinrDlg::OnBnClickedStatistikenOut(); }

2. Quadratische LUT
Analog zu 1. soll die Bildverarbeitungssoftware eine quadratische LUT auf ein Eingangsbild anwenden knnen. Hierfr wird der Grauwert im Ausgangsbild bzgl. des Eingangsbildes quadriert. Da der Grauwert im Ausgangsbild an dieser Stelle jedoch sehr frh (Grauwert im Eingangsbild > 15) an die Grenze von 255 kommt, muss dieser Wert normiert werden. Dies erreicht man durch Division mit 255. Dadurch erhlt man eine quadratische LUT ber den gesamten Wertebereich. Abbildung 3 zeigt den Effekt auf das Ausgangsbild. Bedingt durch die Operation Quadratische LUT wird das Ausgangsbild insgesamt dunkler.

Abbildung 3

Seite 6 von 33

void CLUT_BinrDlg::OnBnClickedQuadLUT() { //Kommentare siehe "void CLUT_BinrDlg::OnBnClickedAusfuehren()" IMG ErgImage; HRESULT Result; TLUT8 binLUT; int i; double test; long InPlane = 0; for(i=0; i<=255; i++) binLUT[i] = pow(i*1.0, 2)/255; //i*1.0, da "pow" long erwartet if( LUT8((IMG)m_cvImg.GetImage(), InPlane, binLUT, (IMG)ErgImage) == 0) { m_cvDispOUT.SetImage((long)ErgImage); m_cvDispOUT.Refresh(); } UpdateData(FALSE); while(RefCount(ErgImage) > 1) ReleaseObject(ErgImage); CLUT_BinrDlg::OnBnClickedStatistikenOut(); }

Seite 7 von 33

3. Wurzelfunktion LUT
Analog zu 1. und 2. soll die Bildverarbeitungssoftware eine Wurzelfunktion LUT auf ein Eingangsbild anwenden knnen. Hierfr wird die Wurzel des Grauwertes des Eingangsbildes berechnet und in das Ausgangsbild geschrieben. Da der Grauwert im Ausgangsbild maximal einen Wert von 15 (255) erreicht, muss dieser Grauwert hnlich wie 2. normiert werden. Dies erreicht man durch Multiplikation mit 255. Dadurch erhlt man eine Wurzelfunktion LUT ber den gesamten Wertebereich. Abbildung 4 zeigt den Effekt auf das Ausgangsbild. Bedingt durch die Operation Wurzelfunktion LUT wird das Ausgangsbild insgesamt heller.

Abbildung 4

void CLUT_BinrDlg::OnBnClickedWurzel() { IMG ErgImage; HRESULT Result; TLUT8 binLUT; int i; double test; long InPlane = 0; for(i=0; i<=255; i++) binLUT[i] = sqrt(255.0)*sqrt(i*1.0); if( LUT8((IMG)m_cvImg.GetImage(), InPlane, binLUT, (IMG)ErgImage) == 0) { m_cvDispOUT.SetImage((long)ErgImage);

Seite 8 von 33

m_cvDispOUT.Refresh(); } UpdateData(FALSE); while(RefCount(ErgImage) > 1) ReleaseObject(ErgImage); CLUT_BinrDlg::OnBnClickedStatistikenOut(); }

4. Lineare Skalierung
Mit Hilfe der linearen Skalierung knnen die Grauwerte modifiziert werden. Der Faktor c1 verschiebt die Grauwerte (c1 < 0 Verschiebung nach links, c1 > 0 Verschiebung nach rechts), der Faktor c2 streckt/staucht den Wertebereich (c2 > 0 Streckung, c2 < 0 Stauchung). Abbildung 5 zeigt zwei Histogramme. Das linke Histogramm stellt die Hufigkeit der Grauwerte des Eingangsbild dar, das rechte Histogramm die Hufigkeit der Grauwerte des Ausgangsbildes nach Anwendung der linearen Skalierung mit den Faktoren c1 = -50 und c2 = 1,2.

Abbildung 5

void CLUT_BinrDlg::OnBnClickedLinSkalierung() { IMG ErgImage; HRESULT Result; TLUT8 binLUT; int i; int LUT_buffer;

Seite 9 von 33

long InPlane = 0; for(i=0; i<=255; i++) { LUT_buffer=(i + m_i_c1)*m_i_c2; //Zwischenspeicher, da binLUT[i] nur char //und bei der Berechnung nicht ausreichend binLUT[i]=LUT_buffer; //Um berlauf zu verhindern, wird der Wertebereich //von binLUT[i] zwischen 0 und 255 gesetzt if(LUT_buffer<0) binLUT[i]=0; else if(LUT_buffer>255) binLUT[i]=255; } if( LUT8((IMG)m_cvImg.GetImage(), InPlane, binLUT, (IMG)ErgImage) == 0) { m_cvDispOUT.SetImage((long)ErgImage); m_cvDispOUT.Refresh(); } UpdateData(FALSE); while(RefCount(ErgImage) > 1) ReleaseObject(ErgImage); CLUT_BinrDlg::OnBnClickedStatistikenOut(); }

Seite 10 von 33

5. Kontrastnormierung
Analog zu 4. knnen die Faktoren c1 und c2 so gewhlt werden, dass ein Eingangsbild, welches nicht den gesamten Grauwertebereich abdeckt und somit einen kleinen Kontrast besitzt, sich nach Anwendung der Operation Kontrastnormierung ber den gesamten Grauwertebereich erstreckt. Die Kontrastnormierung erfolgt mittels der Gren des aktuellen Grauwertes und des minimalen und maximalen Grauwertes gem der Formel im Quellcode. Der Kontrast wird somit erhht. Abbildung 6 zeigt das Eingangsbild mit Grauwertverteilung links und das Ausgangsbild nach der Operation Kontrastnormierung rechts. Man erkennt, dass sich die Grauwerte ber den gesamten Grauwertebereich verteilen. Der Kontrast des Ausgangsbildes wurde erhht.

Abbildung 6

void CLUT_BinrDlg::OnBnClickedKontrastnormierung() { IMG ErgImage; HRESULT Result; TLUT8 binLUT; int i; long InPlane = 0;

Seite 11 von 33

//Einstellungen des Objektes "LightMeter wegen Ermittlung von Min und Max CLUT_BinrDlg::OnBnClickedHistogrammIN(); //Min und Max fr Berechnung abspeichern m_iMin = m_cvLightmeter.GetSVMin(); m_iMax = m_cvLightmeter.GetSVMax(); //Berechnung fr Kontrastnormierung for(i=0; i<=255; i++) binLUT[i] = (char)((255.0/(m_iMax-m_iMin))*(i-m_iMin)); if( LUT8((IMG)m_cvImg.GetImage(), InPlane, binLUT, (IMG)ErgImage) == 0) { m_cvDispOUT.SetImage((long)ErgImage); m_cvDispOUT.Refresh(); } UpdateData(FALSE); while(RefCount(ErgImage) > 1) ReleaseObject(ErgImage); //Statistiken aktualisieren CLUT_BinrDlg::OnBnClickedStatistikenOut(); }

Seite 12 von 33

6. Addition mit Absolutwert


Die Addition zweier Bilder mit Absolutwert bewirkt einen berlauf der Grauwerte. Der Effekt ist besonders deutlich zu erkennen in Abbildung 7, an den Punkten, an denen sich das Eingangsbild vom Ausgangsbild unterscheidet (hier durch weie Strung, wei = GW 255) ist im Ergebnisbild der gleiche Grauwert wie im Referenzbild vorhanden, da der berlauf an dieser Stelle den aufaddierten Grauwert ergibt. Diese Funktion wird mittels
AriLog8to8((IMG)m_cvImgRef.GetImage(),InPlane,(IMG)m_cvImg.GetImage(),InPla ne,ModeSub,Offset,(IMG)ErgImage) == 0

erreicht. ModeSub gibt hierbei die Operation an, welche durchgefhrt wird: ModeSub = 3 Addition mit berlauf

Abbildung 7

Seite 13 von 33

7. Addition mit negativem Clipping


Die Addition zweier Bilder mit negativem Clipping bewirkt keinen berlauf der Grauwerte. Grauwerte ber 255 werden auf 255 gesetzt. Das Bild wird insgesamt heller, wie in Abbildung 8 zu erkennen ist. Diese Funktion wird mittels
AriLog8to8((IMG)m_cvImgRef.GetImage(),InPlane,(IMG)m_cvImg.GetImage(),InPla ne,ModeSub,Offset,(IMG)ErgImage) == 0

erreicht. ModeSub gibt hierbei die Operation an, welche durchgefhrt wird: ModeSub = 1 Addition ohne berlauf

Abbildung 8

Seite 14 von 33

8. Subtraktion mit Absolutwert


Die Subtraktion zweier Bilder mit Absolutwert bewirkt einen negativen berlauf der Grauwerte. Subtraktion mit Absolutwert stellt den Unterschied zweier Bilder dar (Abbildung 9). Diese Funktion wird mittels
AriLog8to8((IMG)m_cvImgRef.GetImage(),InPlane,(IMG)m_cvImg.GetImage(),InPla ne,ModeSub,Offset,(IMG)ErgImage) == 0

erreicht. ModeSub gibt hierbei die Operation an, welche durchgefhrt wird: ModeSub = 0 Subtraktion mit berlauf

Abbildung 9

Seite 15 von 33

9. Subtraktion mit positivem Clipping


Die Subtraktion mit positivem Clipping bewirkt keinen negativen berlauf der Grauwerte. Grauwerte unter 0 werden auf 0 gesetzt. Das Bild wird insgesamt dunkler und bei der Operation Subtraktion mit positivem Clipping werden lediglich Bildunterschiede deutlich, an den Stellen, an denen das Eingangsbild dunkler ist, als das Referenzbild (Abbildung 10). Diese Funktion wird mittels
AriLog8to8((IMG)m_cvImgRef.GetImage(),InPlane,(IMG)m_cvImg.GetImage(),InPla ne,ModeSub,Offset,(IMG)ErgImage) == 0

erreicht. ModeSub gibt hierbei die Operation an, welche durchgefhrt wird: ModeSub = 2 Subtraktion ohne berlauf

Abbildung 10

Seite 16 von 33

10. Glttungsfilter
Glttungsfilter dienen zur Reduzierung von Rauschen oder kleinen Strungen (Abbildung 11).

Abbildung 11

Nach Anwendung des 3x3 Mittelwertfilters ist das Rauschen weniger stark ausgeprgt. Strpixel werden flchenmig vergrert, die Grauwerte reduzieren sich jedoch. Diese Strpixel sind auf dem weien Hintergrund weniger auffllig. Der Kontrast des Bildes nimmt ab. Die Kanten des Quadrates werden weich gezeichnet. Im Vergleich zum 3x3 Mittelwertfilter werden in diesem Bild die Kanten beim 5x5 Mittelwertfilter noch weicher gezeichnet. Der Kontrast nimmt weiter ab. Grund hierfr ist, dass durch den 5x5 Mittelwertfilter ein grerer Bereich auf einen Pixel wirkt, d.h. der Grauwert teilt sich auf eine Flche auf.

Seite 17 von 33

Wird, statt des 3x3 Mittelwertfilter, ein 3x3 Gaufilter verwendet, zeigt sich, dass das Rauschen weniger reduziert wird (Abbildung 12). Grund hierfr ist die unterschiedliche Gewichtung der Pixel des Eingangsbildes. Die umliegenden Pixel erhalten somit weniger Bedeutung. Die Kanten werden weniger stark weich gezeichnet. Auch der Kontrast nimmt weniger ab, verglichen mit dem 3x3 Mittelwertfilter. Es geht insgesamt weniger Information verloren.

Abbildung 12

Die Funktion Userfilter() ist die eigentliche Filterfunktion. Sie basiert auf der Funktion FilterUser5x5 des Common Vision Blox, die als Eingangsparameter ein Eingangsbild und eine Filtermaske bentigt. Die Funktionen Mean3x3, Mean5x5, Gauss3x3 und Gauss5x5 fllen lediglich die Werte der Filtermaske.
void CLUT_BinrDlg::OnBnClickedUserfilter() { double Summe_Faktor = 0; IMG ErgImage; HRESULT Result; TFilterDef UserFilterMatrix;

Seite 18 von 33

//Vorfaktor aufsummieren //Nur positive Zahlen, da negative Zahlen zu Aufhebung fhren Summe_Faktor = 0; if(m_lF100 > 0) Summe_Faktor = Summe_Faktor + m_lF100; . . . if(m_lF144 > 0) Summe_Faktor = Summe_Faktor + m_lF144; //Matrixelemente an FilterUser5x5 bearbeiten und bergeben UserFilterMatrix.cLLTT = (1000/Summe_Faktor)*m_lF100; . . . UserFilterMatrix.cRRBB = (1000/Summe_Faktor)*m_lF144; UserFilterMatrix.Offst = (long)m_lOffsetFilter; . . . } /************************************************************************** **** 3x3 Mittelwert *************************************************************************** ***/ void CLUT_BinrDlg::OnBnClickedMean3x3() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF111 = 1; m_lF112 = 1; m_lF113 = 1; m_lF121 = 1; m_lF122 = 1; m_lF123 = 1; m_lF131 = 1; m_lF132 = 1; m_lF133 = 1; CLUT_BinrDlg::OnBnClickedUserfilter(); } /************************************************************************** **** 5x5 Mittelwert *************************************************************************** ***/ void CLUT_BinrDlg::OnBnClickedMean5x5() { CLUT_BinrDlg::OnBnClickedloeschen();

Seite 19 von 33

m_lF100 m_lF101 m_lF102 m_lF103 m_lF104 m_lF110 m_lF111 m_lF112 m_lF113 m_lF114 m_lF120 m_lF121 m_lF122 m_lF123 m_lF124 m_lF130 m_lF131 m_lF132 m_lF133 m_lF134 m_lF140 m_lF141 m_lF142 m_lF143 m_lF144 }

= = = = = = = = = = = = = = = = = = = = = = = = =

1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;

CLUT_BinrDlg::OnBnClickedUserfilter(); void CLUT_BinrDlg::OnBnClickedGauss3x3() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF111 = 1; m_lF112 = 4; m_lF113 = 1; m_lF121 = 4; m_lF122 = 12; m_lF123 = 4; m_lF131 = 1; m_lF132 = 4; m_lF133 = 1; CLUT_BinrDlg::OnBnClickedUserfilter(); } void CLUT_BinrDlg::OnBnClickedGauss5x5() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF100 m_lF101 m_lF102 m_lF103 m_lF104 = = = = = 1; 2; 3; 2; 1;

Seite 20 von 33

m_lF110 m_lF111 m_lF112 m_lF113 m_lF114 m_lF120 m_lF121 m_lF122 m_lF123 m_lF124 m_lF130 m_lF131 m_lF132 m_lF133 m_lF134 m_lF140 m_lF141 m_lF142 m_lF143 m_lF144 }

= = = = = = = = = = = = = = = = = = = =

2; 7; 11; 7; 2; 3; 11; 17; 11; 3; 2; 7; 11; 7; 2; 1; 2; 3; 2; 1;

CLUT_BinrDlg::OnBnClickedUserfilter();

Seite 21 von 33

Die Anwendung des 3x3 Mittelwertfilters auf das folgende Eingangsbild hat folgendes Ausgangsbild zur Folge (Abbildung 13).

Abbildung 13

Die weit auseinanderliegenden Linien rechts im Bild werden verbreitert und aufgehellt, dass der genaue Ort der Linien nicht mehr erkennbar ist. Linien, deren Abstand geringer ist, als die Breite des Filterkerns werden nicht vollstndig unterdrckt, sondern um den Faktor 3 reduziert. Aufgrund dieser Tatsache ist solch ein Filter fr verrauschte Bilder mit Barcode Informationen nicht geeignet.

Seite 22 von 33

Wird, statt des 3x3 Mittelwertfilter, ein 3x3 Gaufilter verwendet, zeigt sich, dass die Linien weniger verbreitert werden und insgesamt einen geringeren Grauwert aufweisen (Abbildung 14). Der Effekt der Verschmelzung mehrerer Linien tritt hier nicht auf. Grund hierfr ist die unterschiedliche Gewichtung der Pixel des Eingangsbildes. Die umliegenden Pixel erhalten somit weniger Bedeutung. Die Kanten werden weniger stark weich gezeichnet. Auch der Kontrast nimmt weniger ab, verglichen mit dem 3x3 Mittelwertfilter. Es geht insgesamt weniger Information verloren. Dieser Filter ist unter Umstnden geeignet, einen verrauschten Barcode zu filtern.

Abbildung 14

11. Kantenfilter
Kantenfilter dienen der Darstellung von bergngen und Kanten. nderungen im Eingangsbild werden im Ausgangsbild verstrkt. Homogene Flchen werden im Ergebnisbild mit dem Grauwert dargestellt, da der Differenzenquotient an dieser Stelle 0 ist. Beispiel: x 1/4 1*128-1*128+2*128-2*128+1*128-1*128 = 0

Seite 23 von 33

Exakt waagerechte Kanten werden mit diesem Filter nicht dargestellt, da dieser Filter nur senkrechte Kanten erfasst. Beispiel: x 1/4 1*128-1*128+2*128-2*128+0*128-0*128 = 0

Abbildung 15

Exakt senkrechte Kanten werden mit diesem Filter maximal dargestellt.

x 1/4

1*255-1*128+2*255-2*128+0*128-0*128 = 381 255

Diagonale Kanten werden dunkler dargestellt. x 1/4 1*255-1*255+2*255-2*128+0*255-0*128 = 127

Seite 24 von 33

Abbildung 15 zeigt das Ergebnisbild nach Anwendung eines Sobel-Filters in x-Richtung. Die Kante im rechten Bild wird nicht dargestellt, da an dieser Stelle ein negatives Clipping angewendet wird. Der Grauwert des Achteckes liegt bei ca. 128. Der Differenzenquotient an dieser Stelle ergibt -127. Bedingt durch das Clipping wird dieser auf 0 gesetzt. Mchte man beide Kanten darstellen, muss auf alle Grauwerte ein Offset gesetzt werden. Um eine gleichmige Verschiebung zu erhalten wird ein Offset von 128 angenommen (Abbildung 16).

Abbildung 16

Seite 25 von 33

Mchte man Kanten in Y-Richtung darstellen, muss die Matrix des Sobel-Filters transponiert werden (Abbildung 17).

Abbildung 17

Seite 26 von 33

Mchte man diagonale Kanten darstellen, muss die Matrix des Sobel-Filters um 45 rotiert werden (Abbildung 18).

Abbildung 18

Seite 27 von 33

Eine Mglichkeit Kanten in X-Richtung und in Y-Richtung darzustellen ist der Laplace-Filter (Abbildung 19).

Abbildung 19

Seite 28 von 33

ndert man den Wert in der Mitte von 4 auf 5, wird der uere Bereich heller (Abbildung 20). Je grer der Wert in der Mitte ist, desto hnlicher sind sich Eingangs- und Ausgangsbild. Der Grund hierfr ist, dass der Wert in der Mitte ein Ma fr den Gewicht des alten Grauwertes im neuen Bild ist, whrend die umliegenden Werte (in diesem Fall alles Eins) ein Ma fr den Gewicht der Ableitung (Kantenextraktion) im neuen Bild ist.

Abbildung 20

Seite 29 von 33

void CLUT_BinrDlg::OnBnClickedSobelx3x3() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF111 = 1; m_lF112 = 0; m_lF113 = -1; m_lF121 = 2; m_lF122 = 0; m_lF123 = -2; m_lF131 = 1; m_lF132 = 0; m_lF133 = -1; CLUT_BinrDlg::OnBnClickedUserfilter(); } void CLUT_BinrDlg::OnBnClickedSobely3x3() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF111 = -1; m_lF112 = -2; m_lF113 = -1; m_lF121 = 0; m_lF122 = 0; m_lF123 = 0; m_lF131 = 1; m_lF132 = 2; m_lF133 = 1; CLUT_BinrDlg::OnBnClickedUserfilter(); }

void CLUT_BinrDlg::OnBnClickedLaplace3x3() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF111 = 0; m_lF112 = -1; m_lF113 = 0; m_lF121 = -1; m_lF122 = 4; m_lF123 = -1; m_lF131 = 0; m_lF132 = -1; m_lF133 = 0; CLUT_BinrDlg::OnBnClickedUserfilter(); }

Seite 30 von 33

void CLUT_BinrDlg::OnBnClickedLaplace5x5() { CLUT_BinrDlg::OnBnClickedloeschen(); m_lF100 m_lF101 m_lF102 m_lF103 m_lF104 m_lF110 m_lF111 m_lF112 m_lF113 m_lF114 m_lF120 m_lF121 m_lF122 m_lF123 m_lF124 m_lF130 m_lF131 m_lF132 m_lF133 m_lF134 m_lF140 m_lF141 m_lF142 m_lF143 m_lF144 } void CLUT_BinrDlg::OnBnClickedloeschen() { m_lF100 = 0; m_lF101 = 0; m_lF102 = 0; m_lF103 = 0; m_lF104 = 0; m_lF110 m_lF111 m_lF112 m_lF113 m_lF114 m_lF120 m_lF121 m_lF122 m_lF123 m_lF124 m_lF130 m_lF131 m_lF132 m_lF133 m_lF134 = = = = = = = = = = = = = = = 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; = = = = = = = = = = = = = = = = = = = = = = = = = 0; 0; -1; 0; 0; 0; -1; -2; -1; 0; -1; -2; 16; -2; -1; 0; -1; -2; -1; 0; 0; 0; -1; 0; 0;

CLUT_BinrDlg::OnBnClickedUserfilter();

Seite 31 von 33

m_lF140 m_lF141 m_lF142 m_lF143 m_lF144 }

= = = = =

0; 0; 0; 0; 0;

UpdateData(FALSE); void CLUT_BinrDlg::OnEnChangeOffsetfilter() { UpdateData(TRUE); }

Seite 32 von 33

Fazit
Dank dieses Praktikums wurden die verschiedenen Konzepte der Bildverarbeitung deutlicher. Die Mglichkeit nochmal mit echten Bildern zu arbeiten haben wir zu schtzen gelernt und durch die verschiedenen, unerwarteten Probleme, die zu lsen waren, haben wir unser Wissen vertieft. Der Umgang mit einem Bildverarbeitungsprogramm bietet den groen Vorteil viele Beispiele schnell zu erarbeiten, was zur Hand eher mhsam zu rechnen ist. Das entwickelte Programm kann auerdem aus einer beliebigen Bildverarbeitung zustzlich quantitative Werte (Histogramm, Statistiken) liefern, was auch noch zum besseren Verstndnis aller Konzepte beitrgt.

Seite 33 von 33