Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图像各向异性滤波

图像各向异性滤波

作者头像
OpenCV学堂
发布于 2018-04-04 03:17:31
发布于 2018-04-04 03:17:31
2.4K00
代码可运行
举报
运行总次数:0
代码可运行
各向异性概念

各向异性(英文名称:anisotropy)是指材料在各方向的力学和物理性能呈现差异的特性。晶体的各向异性即沿晶格的不同方向,原子排列的周期性和疏密程度不尽相同,由此导致晶体在不同方向的物理化学特性也不同,这就是晶体的各向异性。亦称“非均质性”。物体的全部或部分物理、化学等性质随方向的不同而各自表现出一定的差异的特性。即在不同的方向所测得的性能数值不同。对图像来说各向异性就是在每个像素点周围四个方向上梯度变化都不一样,滤波的时候我们要考虑图像的各向异性对图像的影响,而各向同性显然是说各个方向的值都一致,常见的图像均值或者高斯均值滤波可以看成是各向同性滤波。

各向异性滤波

是将图像看成物理学的力场或者热流场,图像像素总是向跟他的值相异不是很大的地方流动或者运动,这样那些差异大的地方(边缘)就得以保留,所以本质上各向异性滤波是图像边缘保留滤波器(EPF)。它在各个方向的扩散可以表示如下如下公式:

演示效果

左侧是原图,右侧是各向异性滤波之后的图像

实现代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <opencv2/opencv.hpp>

#include <iostream>


using namespace cv;

using namespace std;

float k = 15;

float lambda = 0.25;

int N = 20;


void anisotropy_demo(Mat &image, Mat &result);

int main(int argc, char** argv) {

    Mat src = imread("D:/vcprojects/images/example.png");

    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("D:/result.png", 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++) {

            // gradient

            n = 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);

        }

    }

}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
彩色图像高斯反向投影
彩色图像高斯反向投影 一:介绍 图像反向投影的最终目的是获取ROI然后实现对ROI区域的标注、识别、测量等图像处理与分析,是计算机视觉与人工智能的常见方法之一。图像反向投影通常是彩色图像投影效果会比灰度图像效果要好,原因在于彩色图像带有更多对象细节信息,在反向投影的时候更加容易判断、而转为灰度图像会导致这些细节信息丢失、从而导致分割失败。最常见的是基于图像直方图特征的反向投影。我们这里介绍一种跟直方图反向投影不一样的彩色图像反向投影方法,通过基于高斯的概率分布公式(PDF)估算,反向投影得到对象区域,该方法
OpenCV学堂
2018/04/04
7250
彩色图像高斯反向投影
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
一、霍夫直线变换 1、霍夫直线变换 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 平面空间到极坐标空间转换 2、霍夫直线变换介绍 对于任意一条直线上的所有点来说 变换到极坐标中,从[0~360]空间,可以得到r的大小 属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线 3、相关API 标准的霍夫变换 cv::HoughLines从平面坐标转换到霍夫空间,最终输出是
MiChong
2020/09/24
3K0
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
ISP基础(10)-Gamma校正及其实现
图2中左图为原图,中图为gamma = 1/2.2在校正结果,原图中左半侧的灰度值较高,右半侧的灰度值较低,经过gamma = 1/2.2校正后(中图),左侧的对比度降低(见胡须),右侧在对比度提高(明显可以看清面容),同时图像在的整体灰度值提高。
233333
2020/11/24
1.9K0
ISP基础(10)-Gamma校正及其实现
OpenCV源码系列|图像去摩尔纹
摩尔纹 去摩尔纹(不知能否看出区别) 代码实现: #include "opencv2/opencv.hpp" typedef cv::Mat Mat; Mat image_add_border( Mat &src ) { int w=2*src.cols; int h=2*src.rows; std::cout << "src: " << src.cols << "*" << src.rows << std::endl; cv::Mat padded;
用户9831583
2022/06/16
1K0
OpenCV源码系列|图像去摩尔纹
OpenCV中基于Retinex的图像增强实现
美国物理学家埃德温∙兰德(Edwin Land) 在 1971 年提出一种被称为色彩的理论,并在颜色恒常性的基础上提出的一种图像增强方法。Retinex 理论认为物体的颜色是由物体对长波、中波和短波光线的反射能力决定的,而不是由反射光强度的绝对值决定的,即物体的色彩不受光照非均性的影响,具有一致性。
zy010101
2020/03/19
2.4K0
暗通道去雾的好文合集
https://www.cnblogs.com/Imageshop/p/3281703.html https://blog.csdn.net/qq_34902877/article/details/103432959 https://blog.csdn.net/qq_29462849/article/details/84848631 https://www.cnblogs.com/herenzhiming/articles/5280759.html 下面给出第3篇文章中代码的详细注释版本。 首先是头文件 #
zy010101
2020/03/25
3610
OpenCV图像处理笔记(一):图片基本操作
==如果有报无法找到opencv_world343.dll的Error,请把C:\opencv\build\x64\vc14\bin下的opencv_world343.dll文件复制到C:\Windows 目录下即可==
MiChong
2020/09/24
1.5K0
OpenCV图像处理笔记(一):图片基本操作
opencv常用函数
本文主要介绍:Opencv常用函数,如均值、最大最小、归一化、滤波、旋转、求连通域等函数。
vv彭
2020/12/16
1.1K0
OpenCV实战 | Hessian矩阵以及在血管增强中的应用
- 由于本文代码基于OpenCV基础库,所以题目中添加了“OpenCV实现”字样。
OpenCV学堂
2020/01/20
4.3K1
OpenCV实战 | Hessian矩阵以及在血管增强中的应用
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该方法针对图像中不同亮度区域进行亮度补偿,使得整个图像亮度背景趋于一致后,再进行常规的阈值分割。实验结果表明,用该方法能取得良好的分割效果。关于常规的阈值分割不是我这篇推文关注的,我这里只实现前面光照补偿的部分。算法的原理可以仔细看论文。论文原文见附录。
BBuf
2020/02/21
1.1K0
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
opencv 图像去雾的C++实现
去雾原理原理是根据何凯明博士的《Single Image Haze Removal Using Dark Channel Prior》这篇文章,介绍见https://www.cnblogs.com/Imageshop/p/3281703.html。及Python代码见:https://blog.csdn.net/wsp_1138886114/article/details/95012769。
zy010101
2020/03/25
1.6K0
基于灰度共生矩阵(GLCM)的图像纹理分析与提取
灰度共生矩阵(Gray Level CO-Occurrence Matrix-GLCM)是图像特征分析与提取的重要方法之一,在纹理分析、特征分类、图像质量评价灯方面都有很重要的应用,其基本原理图示如下:
OpenCV学堂
2020/02/21
8.2K0
使用OpenCV实现偏斜文档校正
使用OpenCV实现偏斜文档校正 纸质文档扫描中经常会发生扫描出来的图像有一定角度的偏斜,对后期的文档信息化OCR提取造成很大的干扰,导致OCR识别准确率下降从而影响文档信息化的结果。这个时候可以使用OpenCV对文档进行纠偏,最常见的文本纠偏算法有两种,分别是 基于FFT变换以后频率域梯度 基于离散点求最小外接轮廓 这两种方法各有千秋,相对来说,第二种方法得到的结果更加准确,第一种基于离散傅立叶变换求振幅的方法有时候各种阈值选择在实际项目中会有很大问题。 基于FFT变换以后频率域梯度 主要思路是先把图像转
OpenCV学堂
2018/04/04
2.6K0
使用OpenCV实现偏斜文档校正
OpenCV实现文字矫正
原始图像 help(argv); CommandLineParser parser(argc, argv, keys); if (parser.has("help")) { help(argv); return 0; } string filename = parser.get<string>(0); Mat img = imread(filename, CV_LOAD_IMAGE_GRAYSCALE); if(
用户9831583
2022/06/16
8650
OpenCV实现文字矫正
OpenCV实现移动图象反模糊
前面发过一篇文章,讲的是如何在频域空间实现图像的离焦模糊恢复,感觉大家很感兴趣,就再来一篇,同样来自OpenCV的官方教程翻译,讲述如何通过OpenCV实现移动对象反模糊,实现特定对象的恢复,先看效果:
OpenCV学堂
2019/06/14
1.3K0
OpenCV实现移动图象反模糊
OpenCV图像处理专栏五 | ACE算法论文解读及实现
这是OpenCV图像处理专栏的第五篇文章,分享一下《Real-time adaptive contrast enhancement for imaging sensors》论文解读及实现,论文地址见附录。本文的算法简称为ACE算法是用来做图像对比度增强的算法。图像对比度增强的算法在很多场合都有用处,特别是在医学图像中,这是因为在众多疾病的诊断中,医学图像的视觉检查时很有必要的。而医学图像由于本身及成像条件的限制,图像的对比度很低。因此,在这个方面已经开展了很多的研究。这种增强算法一般都遵循一定的视觉原则。众所周知,人眼对高频信号(边缘处等)比较敏感。虽然细节信息往往是高频信号,但是他们时常嵌入在大量的低频背景信号中,从而使得其视觉可见性降低。因此适当的提高高频部分能够提高视觉效果并有利于诊断。
BBuf
2019/12/12
1.8K0
OpenCV图像处理专栏五 | ACE算法论文解读及实现
OpenCV 角点检测(二) Harrise
Harrise算子是在Moravec算子的基础上改进得到的,Moravec角点检测算子见链接:http://blog.csdn.net/chaipp0607/article/details/54649235
chaibubble
2022/05/07
2450
OpenCV 角点检测(二) Harrise
java 添加盲水印_OpenCV-图像处理-频域手段添加盲水印
盲水印,顾名思义就是看不见的水印。今天我们来说下频域加盲水印。相信大家做过图像处理的对频域、时域、空间域概念都有了一定的了解。
全栈程序员站长
2022/11/17
2.6K0
java 添加盲水印_OpenCV-图像处理-频域手段添加盲水印
OpenCV实现失焦模糊图像恢复
圆形的PSF因为只有一个半径参数R,是一个非常好的失焦畸变近似,所以算法采用圆形的PSF。
OpenCV学堂
2019/06/03
6.2K1
【手撕算法】FT显著性检测算法
图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息。
周旋
2022/08/07
6940
【手撕算法】FT显著性检测算法
推荐阅读
相关推荐
彩色图像高斯反向投影
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验