4. 各向异性扩散滤波

本文作者:图像与视觉InSight 行者 杨尚朋 转载请注明

目录

4. 各向异性扩散滤波

4.1 处理效果展示

图像处理前后对比

4.2 各向异性扩散滤波原理

4.2.1 概念

4.2.2 原理

4.3 代码展示


4.1 处理效果展示

图像处理前后对比

处理前

处理后

4.2 各向异性扩散滤波原理

4.2.1 概念

各向异性扩散滤波(Anisotropic Filter),同中值滤波、高斯滤波一样,也是一种滤除图像噪音的方法。可以用于边缘检测或提取之前的预处理,去除无关噪声,增加边缘的有效性。某些基于各向异性滤波的边缘提取算法,在滤波的同时还能兼顾边缘保持。要了解各向异性扩散滤波,先来了解几个概念:各向异性,各向异性扩散。

各向异性,指物体的全部或者部分物理、化学性质随方向的不同而有所变化的特性。例如石墨单晶的电导率在不同方向的差异可达数千倍,又如天文学上,宇宙微波背景辐射亦拥有些微的各向异性。许多的物理量都具有各向异性,如弹性模量、电导率、在酸中的溶解速度等。

各向异性扩散,是有选择性的平滑(扩散)过程,这种选择是指方向选择的非均匀性,这种平滑过程在均匀的区域不受限制,而在跨越边界部分被抑制,因此在平滑噪声的同时保持图像的边缘特征。

4.2.2 原理

假设图像为I,滤波公式如下:

从上式可以看出,各向异性扩散滤波依然是求出核窗口内邻域权值,再进行加权相加,作为当前点的灰度值。其中,t代表迭代次数;△表示梯度算子,四个方向的梯度公式如下:

由上式可以看出,在灰度值变化不大的区域,等号左边的数值可正可负,也变化不大。但是,若在一个方向上出现了边界,即灰度值变化较大,等号左边会出现绝对值较大的数值。

c表示扩散系数,四个方向上的扩散系数计算如下:

由上式可以看出,在灰度值变化不大的区域,等号左边的数值接近或等于1,但是在灰度值变化较大的区域,比如边界,等号左边的数值就会接近或逼近0。

注意:在这里热传导系数K越大,图像越平滑;整个公式需要设置的参数主要有三个,迭代次数 t,根据情况设置;导热系数相关的 k,取值越大,结果越平滑,越不易保留边缘;λ 取值越大,结果越平滑。

讲到这里,我们可以看出各向异性扩散滤波与其他方法的不同。(1)应用方面,该方法滤除噪声时,保边效果好(2)原理方面,将图像看做热量场,所进行的操作完全依照热量场内热的传播原理;(3)核窗口为十字形,而非N×N的矩阵。

4.3 代码展示

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;float k = 15;
float lambda = 0.25;
int N = 5;void anisotropy_demo(Mat &image, Mat &result);int main(int argc, char** argv)
{Mat src = imread("C:\\Users\\SYYSP\\Desktop\\BLOG\\imageMaterial\\GaoQueenOri.jpg");if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input image", CV_WINDOW_AUTOSIZE);imshow("input image", src);vector<Mat> mv;vector<Mat> results;split(src, mv);for (int n = 0; n < mv.size(); n++) {Mat m = Mat::zeros(src.size(), CV_32FC1);mv[n].convertTo(m, CV_32FC1);results.push_back(m);}int w = src.cols;int h = src.rows;Mat copy = Mat::zeros(src.size(), CV_32FC1);for (int i = 0; i < N; i++) {anisotropy_demo(results[0], copy);copy.copyTo(results[0]);anisotropy_demo(results[1], copy);copy.copyTo(results[1]);anisotropy_demo(results[2], copy);copy.copyTo(results[2]);}Mat output;normalize(results[0], results[0], 0, 255, NORM_MINMAX);normalize(results[1], results[1], 0, 255, NORM_MINMAX);normalize(results[2], results[2], 0, 255, NORM_MINMAX);results[0].convertTo(mv[0], CV_8UC1);results[1].convertTo(mv[1], CV_8UC1);results[2].convertTo(mv[2], CV_8UC1);Mat dst;merge(mv, dst);imshow("result", dst);imwrite("C:\\Users\\SYYSP\\Desktop\\BLOG\\imageMaterial\\GaoQueenOri_AnisotropicDiffusionFilter.jpg", dst);waitKey(0);return 0;
}void anisotropy_demo(Mat &image, Mat &result)
{int width = image.cols;int height = image.rows;// 四邻域梯度float n = 0, s = 0, e = 0, w = 0;// 四邻域系数float nc = 0, sc = 0, ec = 0, wc = 0;float k2 = k * k;for (int row = 1; row < height - 1; row++) {for (int col = 1; col < width - 1; col++) {// gradientn = image.at<float>(row - 1, col) - image.at<float>(row, col);s = image.at<float>(row + 1, col) - image.at<float>(row, col);e = image.at<float>(row, col - 1) - image.at<float>(row, col);w = image.at<float>(row, col + 1) - image.at<float>(row, col);nc = exp(-n * n / k2);sc = exp(-s * s / k2);ec = exp(-e * e / k2);wc = exp(-w * w / k2);result.at<float>(row, col) = image.at<float>(row, col) + lambda * (n*nc + s * sc + e * ec + w * wc);}}
}

图形算法与实战:1.滤波专题 (4)各向异性扩散滤波相关推荐

  1. 图像保边滤波器集锦---各向异性扩散滤波(Anisotropic Filter)算法与实现

    本篇集锦要介绍的是各向异性扩散滤波,也叫Anisotropic filter,它克服了高斯模糊的缺陷,具有保留图像边缘细节同时减少噪声的作用,因此,也是可以做人像美颜磨皮算法的: 首先,我们来了解一下 ...

  2. 各向异性扩散滤波_原理与算法

    1.原理简述 各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像. 通常我们有将图像看作矩阵的,看作图的,看作随机过程的,记得过去还有 ...

  3. 数字图像处理Python语言实现-图像增强-各向异性扩散滤波

    各向异性扩散滤波 各向异性扩散滤波 1. 前言 2. 各向异性扩散滤波描述 3. 代码实现 1. 前言 各向异性扩散滤波主要是基于热扩散框架,通过偏微分方程来表示.基于偏微分方程的各向异性扩散被广泛用 ...

  4. OpenCV 保边滤波器 各向异性扩散滤波(Anisotropic Filter)

    各向异性扩散滤波(Anisotropic filter),是双边滤波的一种简化,具有双边滤波的保留图像边缘同时减少噪声的作用,又加快了算法的实现速度. 首先,我们来了解一下各向异性扩散. 各向异性扩散 ...

  5. 各向异性扩散滤波(Anisotropic Filter)原理与C++实现

    各向异性扩散滤波(Anisotropic Filter,又称 Perona-Malik Filter),主要是用来平滑图像,克服了高斯滤波模糊的缺陷,各向异性扩散在平滑图像的同时又能保留图像边缘:此外 ...

  6. 图形算法与实战:5.图像边缘羽化专题(1)滤波方法羽化

    图像羽化专题-滤波方法羽化 1. 图像处理前后结果展示 图像处理前 图像处理后 2. 图像羽化 图像羽化,是指图像边缘以渐变的方式,达到逐渐朦胧或者虚化的效果. 3. 代码展示 #include &l ...

  7. 【白话机器学习】算法理论+实战之K近邻算法

    作者1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻 ...

  8. 【滤波专题-第6篇】小波阈值去噪方法看这一篇就明白了~(附MATLAB实现)

    小波阈值去噪的算法是近些年比较流行的一种滤波方法,由于其阈值函数有着众多的改进方式和改进空间,改进阈值函数也往往可以作为创新点和亮点写到论文中,所以对于正在搞相关研究的同学们写论文是比较友好的(轻松水 ...

  9. k近邻算法_【白话机器学习】算法理论+实战之K近邻算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

最新文章

  1. 我国企业大数据的发展与应用总览
  2. Xcode7 真机免证书调试Cocos2D游戏
  3. jitwatch查看JIT后的汇编码
  4. [云炬Python学习笔记] Python读取指定文件夹下的文件
  5. Java10-day01【继承(变量-构造方法访问-成员方法 访问)、super内存图、方法重写、继承、包、import、权限修饰符、final、static】
  6. 19_05_01校内训练[polygon]
  7. IDEA如何像Eclipse打开多个项目?
  8. 华为云工业智能体,做智能化最“硬核”
  9. js获取鼠标所在html元素的id和属性
  10. Windows多屏开发小记
  11. java bridge 模式_学习:java设计模式—Bridge模式
  12. Python+Selenium练习篇之4-利用link text定位元素
  13. IE下载xlsx、docx、pptx文件时自动变成zip文件问题
  14. 原生js和jquery 获取文档高度
  15. 易到CEO巩振兵被曝本周已离职 其称“在开会”
  16. iOS苹果超级签苹果分发平台企鹅:422903005
  17. 数据库练习:分数排名
  18. 【裸SPFA】星门跳跃
  19. 重温设计模式二 设计原则之依赖倒置原则
  20. 计算机基础题精选(一)

热门文章

  1. 红客学堂 不输密码照样登陆操作系统(转)
  2. linux复制文件带系统时间,不同方法/系统下复制文件时新文件的日期区别,以及查看文件创建时间、修改时间、访问时间的方法...
  3. mybatis(18)——动态sql,where标签去掉多余的and和or
  4. css图片 或者文字 颜色变浅
  5. 楼盘数据可视化与预测分析
  6. PPT基础(二十九)添加备注和批注
  7. 2018年高职组——信息评估与管理赛题(解析)
  8. VLAN——虚拟局域网概述
  9. Python数据分析基础
  10. openwrt 软路由 docker安装青龙面板 + Ninja(进阶版)