0

我在网上闲逛,我读过的教程都没有我真的不明白。如何为 .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

};

现在如何开始?据我所知,我必须计算一些总和,但我完全不知道如何计算,这个总和是针对整个图像还是针对单个像素?好的,然后呢?我需要将它除以某个商。是函数的那个​​参数还是它应该自己计算它。我真的很困惑这个。有人可以用初学者可以理解的简单术语向我解释该过滤器的实现吗?

4

1 回答 1

2

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

完成后,您需要构建过滤器。从您稍微模棱两可的问题来看,听起来您需要一个 size 的过滤器3x3。理论上,您可以重新使用您的Image结构来表示过滤器——过滤器(pixels部分)的内容将取决于您正在使用的特定过滤器(例如拉普拉斯算子或索贝尔)。获得过滤器后,将其与您在第一步中加载的图像进行卷积。从技术上讲,您已经完成了,但假设您确实想查看结果,您需要将卷积结果写入另一个 PGM 文件。

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

卷积输出看起来像这样

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

于 2010-11-23T08:27:13.187 回答