算法原理
可以看这篇文章:
https://zhuanlan.zhihu.com/p/58326095
简单介绍
这篇文章提出了一种新的方法用于滤波保留边缘和角点,原理在上面的文章可以找到,同时也能找到论文原文和一份github的代码,这种方法可以配合现有的任何滤波方法使用,让这些滤波方法都强制保留边缘。只需要将对应的滤波的核的系数换成对应的滤波方法的核即可。这里我实现了均值滤波的Side Window Filtering,代码奉献一下。
实现的细节
作者的matlab代码:https://github.com/YuanhaoGong/SideWindowFilter
代码
//针对灰度图的均值滤波+CVPR 2019的SideWindowFilter
//其他种类的滤波直接换核即可
int cnt[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
vector <int> filter[8];
void InitFilter(int radius) {
int n = radius * 2 + 1;
for (int i = 0; i < 8; i++) {
cnt[i] = 0;
filter[i].clear();
}
for (int i = 0; i < 8; i++) {
for (int x = 0; x < n; x++) {
for (int y = 0; y