2010-11-23 43 views
0

我在網絡中漫遊,沒有看過我讀過的教程,我不太明白。如何爲.pgm圖片實現高通3濾鏡?我有圖像的結構:ansi-c。用於.pgm圖片的高通3濾鏡

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 

}; 

現在該如何啓動?據我所知,我必須計算一些SUM,但我完全不知道如何,這是整個圖像的總和還是單像素?好的,那是什麼?我需要把它除以一些商數。這是功能的論點,還是應該由它自己來計算。我對這個很困惑。初學者能夠理解的簡單條款中,有人能夠向我解釋該過濾器的實現嗎?

+0

請發佈一個指向您的參考實現/算法的指針 – 2010-11-23 04:09:13

+0

我建議您更改您的問題。首先,那裏沒有真正的高通濾波器。例如,索貝爾和拉普拉斯都被認爲是高通濾波器。其次,您需要更具體地確定您正在遇到問題的部分。我會回答你最初的問題,但你需要提供更多信息以獲得任何真正的幫助。 – misha 2010-11-23 08:11:07

回答

2

首先,您需要將PGM圖像讀入您的結構。如果您不知道如何操作,請閱讀PGM format

一旦你這樣做了,你需要構建你的過濾器。從你含糊不清的問題來看,這聽起來像你需要一個尺寸爲3x3的過濾器。理論上,您可以重新使用Image結構來表示過濾器 - 過濾器的內容(pixels部分)將取決於您使用的特定過濾器(例如拉普拉斯或Sobel)。在您獲得了您的過濾器後,convolve它與您在第一步中加載的圖像一起使用。從技術上講,你在這裏完成,但假設你真的想看到結果,你需要將卷積結果write到另一個PGM文件。您需要編寫自己的卷積函數(這將涉及您在問題中提到的「計算一些SUM」部分)。除非已提供,否則您還需要自己的圖像I/O功能。

卷積輸出看起來像this。作爲一個方面說明,最好將設計中文件系統中內存中的圖像表示和圖像表示分開。例如,目前,您的Image結構假定每個圖像都有對應的filename,如果Image未從文件系統加載(例如,如果它是您自己創建的過濾器),則這將毫無意義。