2010-11-23 2 views
0

Я блуждаю по сети, и ни один учебник, который я прочитал, я действительно не понимаю. Как реализовать фильтр High-pass3 для изображений .pgm? У меня есть структура изображения:ansi-c. Фильтр High-Pass3 для изображений .pgm

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 

}; 

А теперь, с чего начать? Насколько я знаю, мне приходится подсчитывать некоторые СУММЫ, но я полностью не знаю, как и эта сумма одна для целого изображения или для одного пикселя? Хорошо, тогда что? Мне нужно разделить его на некоторый фактор. Это аргумент функции, или он должен считать это сам по себе. Я действительно смущен этим. Может ли кто-нибудь объяснить реализацию этого фильтра для меня простым языком, который может понять новичок?

+0

Просьба указать указатель на вашу ссылочную реализацию/алгоритм – 2010-11-23 04:09:13

+0

Я предлагаю перефразировать ваш вопрос. Во-первых, нет ни одного истинного фильтра высоких частот. Например, Собель и Лапласиан считаются высокочастотными фильтрами. Во-вторых, вам нужно быть более конкретным, с какой частью именно вы столкнулись с проблемой. Я отвечу на ваш первоначальный вопрос, но вам нужно предоставить дополнительную информацию, чтобы получить реальную помощь. – misha 2010-11-23 08:11:07

ответ

2

Во-первых, вам нужно прочитать свой PGM-образ в своей структуре. Если вы не знаете, как это сделать, читайте об PGM format.

Как только вы это сделали, вам нужно создать свой фильтр. Из вашего слегка двусмысленного вопроса, похоже, вам нужен фильтр размером 3x3. Теоретически вы можете повторно использовать структуру Image для представления фильтра - содержимое фильтра (часть pixels) будет зависеть от конкретного используемого фильтра (например, Laplacian или Sobel). После того, как вы получили свой фильтр, convolve с изображением, загруженным на первом шаге. Технически, вы закончили здесь, но если вы действительно хотите увидеть результат, вам понадобится write результат свертки в другой файл PGM.

Вам нужно будет написать свою собственную функцию свертки (это будет включать в себя часть «Считать часть SUM», указанную в вашем вопросе). Вам также понадобятся ваши собственные функции ввода-вывода изображений, если они уже не были предоставлены.

Выход свертки будет выглядеть примерно как this.

В качестве побочного примечания было бы лучше отделить представление изображения в памяти и представление изображения в файловой системе в вашем дизайне. Например, в настоящее время ваша структура Image предполагает, что каждое изображение имеет соответствующий filename, что будет бессмысленным, если Image не был загружен из файловой системы (например, если это фильтр, который вы создали сами).