ANSI-C。用于.pgm图片的高通3滤镜

时间:2010-11-23 00:08:52

标签: algorithm image image-processing filter pgm

我在网上闲逛,没有一本我读过的教程,我真的不明白。如何为.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,但我完全不知道如何,这是一个整个图像的一个或它是单像素?好的,那又怎样?我需要用商来划分它。是函数的论证还是应该自己计算。我真的很困惑这个。有人可以用初学者可以理解的简单术语向我解释过滤器的实现吗?

1 个答案:

答案 0 :(得分:2)

首先,您需要将PGM图像读入结构中。如果您不知道如何执行此操作,请阅读PGM format

完成后,您需要构建过滤器。从您稍微模棱两可的问题来看,您需要一个大小为3x3的过滤器。从理论上讲,您可以重复使用Image结构来表示过滤器 - 过滤器的内容(pixels部分)将取决于您使用的特定过滤器(例如拉普拉斯算子或索贝尔)。获得过滤器后,convolve将其与您在第一步中加载的图像一起使用。从技术上讲,你已经在这里完成了,但假设你真的想看到结果,你需要将write卷积结果发送到另一个PGM文件。

您需要编写自己的卷积函数(这将涉及您在问题中提到的“计算一些SUM”部分)。您还需要自己的图像I / O功能,除非它们已经提供。

卷积输出看起来像this

作为旁注,最好将内存中图像的表示与设计中文件系统中图像的表示分开。例如,目前,您的Image结构假定每个图像都有一个对应的filename,如果Image没有从文件系统加载,这将毫无意义(例如,如果它是一个过滤器你自己创造的。)