ansi-c. Фильтр High-Pass3 для картин .pgm
-
27-09-2019 - |
Вопрос
Я блуждаю через Интернет, и ни один из учебников я читал, я на самом деле не понимаю. Как реализовать фильтр 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
};
И теперь как начать? Насколько я знаю, я должен считать какую-то сумму, но я полностью не знаю, как, и это сумма одна для всего изображения или это для одного пикселя? Хорошо, тогда что? Мне нужно разделить его кавыжным. Это аргумент функции или он должен посчитать его сам по себе. Я действительно путаю об этом. Может кто-нибудь объяснить реализацию этого фильтра для меня в простых терминах, который мог бы понять?
Решение
Во-первых, вам необходимо прочитать изображение PGM в свой структурой. Если вы не знаете, как это сделать, прочитайте о Формат PGM.
Как только вы это сделали, вам нужно построить свой фильтр. Из вашего слегка неоднозначного вопроса звучит так, как вам нужен фильтр размера 3x3
. Отказ Теоретически, вы можете повторно использовать свой Image
структура для представления фильтра - содержимое фильтра ( pixels
Часть) будет зависеть от конкретного фильтра, который вы используете (например, лаплацын или сорель). После того, как вы получите свой фильтр, озвучивать Это с изображением, которое вы загрузили на первом шаге. Технически, вы сделали здесь, но предполагая, что вы на самом деле хотите увидеть результат, вам нужно записывать Результат свертки к другому файлу PGM.
Вам нужно будет написать свою собственную функцию свертки (это будет включать часть «подсчет какой-то суммы», которую вы упомянули в вашем вопросе). Вам также понадобится ваши собственные функции ввода / вывода I / O, если они уже не были предоставлены.
Вывод свертки будет выглядеть что-то вроде это.
В качестве бокового примечания было бы лучше отделить представление изображения в памяти и представлении изображения в файловой системе в вашем дизайне. Например, в настоящее время ваш Image
структура предполагает, что каждое изображение имеет соответствующий filename
, что будет бессмысленным, если Image
Разве не загружено из файловой системы (например, если это фильтр, который вы создали самостоятельно).