目标
本教程演示如何使用 F 变换对图像进行滤波。你将看到
模糊变换应用
正如我在前面的教程中展示的,F 变换是一种模糊数学工具,在图像处理中非常有用。让我重新写一下使用之前介绍的核 \(g\) 的公式
\[ F^0_{kl}=\frac{\sum_{x=0}^{2h+1}\sum_{y=0}^{2h+1} \iota_{kl}(x,y) g(x,y)}{\sum_{x=0}^{2h+1}\sum_{y=0}^{2h+1} g(x,y)}, \]
其中 \(\iota_{kl} \subset I\) 以像素 \((k \cdot h,l \cdot h)\) 为中心,且 \(g\) 是核。可以在相关论文中找到更多详细信息。
代码
{
Mat I = imread(
"input.png");
ft::createKernel(ft::LINEAR, 3, kernel1, 3);
ft::createKernel(ft::LINEAR, 100, kernel2, 3);
ft::filter(I, kernel1, output1);
ft::filter(I, kernel2, output2);
imwrite("output1_filter.png", output1);
imwrite("output2_filter.png", output2);
return 0;
}
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
与磁盘上的文件关联的文件存储的“黑匣子”表示。
定义 core.hpp:102
说明
图像滤波以定义的方式更改输入,以增强或简单更改某些具体特征。让我演示一下简单的模糊处理。
第一步,我们加载输入图像。
Mat I = imread(
"input.png");
遵循 F 变换公式,我们必须指定一个核。
ft::createKernel(ft::LINEAR, 3, kernel1, 3);
ft::createKernel(ft::LINEAR, 100, kernel2, 3);
所以现在,我们有在radius
中不同的两个核。较大的半径会导致更大的模糊。
滤波本身如下图所示应用。
ft::filter(I, kernel1, output1);
ft::filter(I, kernel2, output2);
输出图像如下所示。
输入、输出 1(半径 3)、输出 2(半径 100)