目标
本教程向您演示如何使用 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
解释
图像滤波以定义的方式更改输入,以增强或简单地更改一些具体特征。让我演示一些简单的模糊。
第一步,我们加载输入图像。
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)