0. 完整仓库 & 教程:
这一章节的完整代码在:Chapter 2. Image Reduction, Enlargement and Negative
如果你喜欢这个系列的文章或者感觉对你有帮助,请给我的仓库一个⭐️。
1. 图像缩小
-
1.1 交替行缩小算法
算法:
假设原始图像尺寸为 ,缩小比例为
,输出尺寸则为
。
图像(每行和每列)每隔 个像素再取下一个像素,其间隔内的像素则被忽略。
后续代码中图像的缩放比例将被设置为0.5。
图像和结果对比(lena, bridge, noise; ratio = 0.5):
结果分析:
该算法根据图像的缩小比例选择并丢弃每行和列的像素。因此,输出图像中的所有像素都直接来自原图。这种方法简单有效地确定了输出像素的值,但由于缺失了一些像素行和列,使得物体边缘锯齿化。
代码实现(完整代码见顶部GitHub):
for(int i = 0; i < image->Height/2 - 1; i++) {
for(int j = 0; j < image->Width/2 - 1; j++) {
tempout[(outimage->Width)*i + j] = tempin[(image->Width)*row + column];
column += 2;
}
row += 2;
column = 0;
}
-
1.2 分数线性缩小图像算法
算法:
定义 为输出图像的缩放比例(当
是缩小)。
输出图像与原图像之间的对应关系将是:
后续的代码可以根据输入的缩放