2010-11-23 8 views
0

Ich bin durch das Web wandern und keiner der Tutorials, die ich gelesen habe, verstehe ich nicht wirklich. Wie implementiere ich den High-Pass3-Filter für .pgm-Bilder? Ich habe Bildstruktur:ansi-c. High-Pass3-Filter für .pgm Bilder

struct Image { 

char* file_name; //name of .pgm file 
char header[3]; 
int max_grey_value; 
int height; 
int width; 
int **pixels; //pixels matrix 
struct Image *next; //next element in the list 

}; 

Und jetzt, wie man anfängt? Soweit ich weiß, muss ich etwas SUMME zählen, aber ich weiß überhaupt nicht wie, und ist diese Summe eins für das ganze Bild oder es ist für ein einzelnes Pixel? OK was dann? Ich muss es durch einen Quotienten teilen. Ist das Argument der Funktion oder sollte es von selbst zählen? Ich bin wirklich verwirrt über diesen. Kann mir jemand die Implementierung dieses Filters in einfachen Worten erklären, die ein Anfänger verstehen könnte?

+0

Bitte senden Sie einen Zeiger auf Ihre Referenzimplementierung/Algorithmus –

+0

Ich schlage vor, Ihre Frage neu zu formulieren. Erstens gibt es keinen echten Hochpassfilter da draußen. Zum Beispiel werden der Sobel und der Laplace-Operator beide als Hochpassfilter betrachtet. Zweitens müssen Sie genauer angeben, mit welchem ​​Teil genau Sie ein Problem haben. Ich beantworte Ihre erste Frage, aber Sie müssen weitere Informationen bereitstellen, um echte Hilfe zu erhalten. – misha

Antwort

2

Zuerst müssen Sie Ihr PGM-Image in Ihre Struktur einlesen. Wenn Sie nicht wissen, wie das geht, lesen Sie über die PGM format.

Sobald Sie das getan haben, müssen Sie Ihren Filter erstellen. Aus Ihrer etwas mehrdeutigen Frage klingt es, als ob Sie einen Filter der Größe 3x3 benötigen. Theoretisch können Sie Ihre Image-Struktur wiederverwenden, um den Filter darzustellen - der Inhalt des Filters (der pixels-Teil) hängt von dem spezifischen Filter ab, den Sie verwenden (z. B. Laplace oder Sobel). Nachdem Sie Ihren Filter haben, convolve es mit dem Bild, das Sie im ersten Schritt geladen. Technisch gesehen sind Sie hier fertig, aber vorausgesetzt, dass Sie das Ergebnis tatsächlich sehen möchten, müssen Sie das Convolution-Ergebnis write in einer anderen PGM-Datei angeben.

Sie müssen Ihre eigene Faltungsfunktion schreiben (dies beinhaltet den Teil "Anzahl SUMME zählen", den Sie in Ihrer Frage erwähnt haben). Sie benötigen auch eigene Bild-E/A-Funktionen, sofern sie nicht bereits bereitgestellt wurden.

Die Convolution-Ausgabe wird in etwa wie this aussehen.

Als eine Randnotiz wäre es besser, die Darstellung des Bildes im Speicher und die Darstellung des Bildes in einem Dateisystem in Ihrem Design zu trennen. Zum Beispiel setzt Ihre Struktur Image derzeit voraus, dass jedes Bild eine entsprechende filename hat, was bedeutungslos ist, wenn die Image nicht aus dem Dateisystem geladen wurde (z. B. wenn es sich um einen Filter handelt, den Sie selbst erstellt haben).

+0

+1 nur für das Verständnis der Frage. –