我在网上闲逛,没有一本我读过的教程,我真的不明白。如何为.pgm图片实现High-pass3过滤器?我有Image的结构:
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 :(得分:2)
首先,您需要将PGM图像读入结构中。如果您不知道如何执行此操作,请阅读PGM format。
完成后,您需要构建过滤器。从您稍微模棱两可的问题来看,您需要一个大小为3x3
的过滤器。从理论上讲,您可以重复使用Image
结构来表示过滤器 - 过滤器的内容(pixels
部分)将取决于您使用的特定过滤器(例如拉普拉斯算子或索贝尔)。获得过滤器后,convolve将其与您在第一步中加载的图像一起使用。从技术上讲,你已经在这里完成了,但假设你真的想看到结果,你需要将write卷积结果发送到另一个PGM文件。
您需要编写自己的卷积函数(这将涉及您在问题中提到的“计算一些SUM”部分)。您还需要自己的图像I / O功能,除非它们已经提供。
卷积输出看起来像this。
作为旁注,最好将内存中图像的表示与设计中文件系统中图像的表示分开。例如,目前,您的Image
结构假定每个图像都有一个对应的filename
,如果Image
没有从文件系统加载,这将毫无意义(例如,如果它是一个过滤器你自己创造的。)