精华内容
下载资源
问答
  • 高斯卷积模板(高斯函数)Matlab代码,可实现二维高斯卷积模板的生成功能。M文件,可用记事本打开。
  • 利用matlab对RGB三个通道进行高斯卷积(附结果图)
  • matlab开发-通过频域进行三维高斯平滑卷积的效率。本机傅立叶实现,支持GPU计算和各向异性体素。
  • 1、二维高斯函数 G(x,y)=12πσ2exp⁡(−x2+y22σ2)G(x,y)=\frac{1}{2\pi {{\sigma }^{2}}}\exp \left( -\frac{{{x}^{2}}+{{y}^{2}}}{2{{\sigma }^{2}}} \right)G(x,y)=2πσ21​exp(−2σ2x2+y2​) 2、坐标(以5×5...

    1、二维高斯函数
    G ( x , y ) = 1 2 π σ 2 exp ⁡ ( − x 2 + y 2 2 σ 2 ) G(x,y)=\frac{1}{2\pi {{\sigma }^{2}}}\exp \left( -\frac{{{x}^{2}}+{{y}^{2}}}{2{{\sigma }^{2}}} \right) G(x,y)=2πσ21exp(2σ2x2+y2)
    2、坐标 ( x , y ) (x,y) (x,y)(以5×5卷积核为例)
    在这里插入图片描述
    3、Matlab实现

    sigma1=2;
    k=5;    % kernel大小
    pai=3.1415926;
    kernel=zeros(k);
    m=(k+1)/2;
    sigma=2*sigma1*sigma1;
    for i=-1*(k-1)/2:(k-1)/2
       for j=-1*(k-1)/2:(k-1)/2
          kernel(i+m,j+m)=(-1/(pai*sigma))*exp(-1*(i^2+j^2)/(sigma));
       end
    end
    kernel=kernel./sum(kernel,'all')  % 归一化
    

    结果与Matlab函数fspecial()生成的高斯卷积核一致,卷积核如图所示:
    在这里插入图片描述
    4、OpenCV实现

    int main()
    {
    	double sigma = 2, pai = 3.1415926;
    	int k = 5, m = (k + 1) / 2, n = m - 1;	// k-高斯卷积核大小
    	Mat kernel = Mat::zeros(Size(k, k), CV_64FC1);
    	double *p, Ksum;
    	sigma = 2 * sigma * sigma;
    	for (int i = -1 * n; i <= n; i++)
    	{
    		p = kernel.ptr<double>(i + n);
    		for (int j = -1 * n; j <= n; j++)
    		{
    			p[j + n] = (1 / (pai*sigma)) * exp(-1 * (i * i + j * j) / sigma);
    		}
    	}
    	Ksum = sum(kernel).val[0];
    	kernel = kernel.mul(1/Ksum);
    	cout << kernel << endl;
    
    	getchar();
    	return 0;
    }
    
    展开全文
  • Matlab中的高斯卷积滤波矩阵

    万次阅读 2015-10-24 22:12:24
    图像处理中很关键的一块就是提取图像的内容 有一种方法就是根据颜色变化的剧烈程度来提取 ...滤波矩阵就是为了一定程度上消除噪声,其中比较常见的是高斯卷积滤波矩阵 在Matlab中是用fspecial('gaus

    图像处理中很关键的一块就是提取图像的内容

    有一种方法就是根据颜色变化的剧烈程度来提取

    也就是对图像的像素点求偏导数,如果某个方向偏导数很大,一般来说就是不连续的,即轮廓线

    但是图像里往往会有很讨厌的噪声点

    如果不考虑这些点,直接对图像求梯度函数的话,就会收到很大的影响

    滤波矩阵就是为了一定程度上消除噪声,其中比较常见的是高斯卷积滤波矩阵

    在Matlab中是用fspecial('gaussian', hsize, sigma)来构造

    return a rotationally symmetric Gaussian lowpass filter of size hsize with standard deviation sigma (positive). hsize can be a vector specifying the number of rows and columns in h, or it can be a scalar, in which case h is a square matrix. The default value for hsize is [3 3]; the default value for sigma is 0.5.

    如h = fspecial('gaussian',[3,3],1.5)构造了一个大小为3×3、方差为1.5的高斯滤波矩阵。

    其中方差越大,那么处理所得的图像与原图相比就越模糊,所以要把握好方差的度

     

    再加上滤波函数就可以对图像进行处理

    滤波函数imfilter(image,flitermatrix)

    filter the image with filtermatrix

    展开全文
  • 通过模板内的值与图像卷积,模板内的值可以直接给定,值有下降的过程即可,也可以通过二维高斯函数生成,这里是通过二维高斯函数生成。 效果如下:   二维高斯函数,定义一个和原图一样大小的高斯函数图像,...

    原理:当前像素值,是由周围像素值决定。通过模板内的值与图像卷积,模板内的值可以直接给定,值有下降的过程即可,也可以通过二维高斯函数生成,这里是通过二维高斯函数生成。

    效果如下:

     

    二维高斯函数,定义一个和原图一样大小的高斯函数图像,sigmma取1,其中(x0, y0)是图像的中心:

    这个截取的模板大小为5x5,以(x0, y0)为中心截取:

    1. Matlab代码实现:

    % 高斯平滑,高斯滤波,高斯卷积
    % 高斯滤波的模板内的值,可以直接人工给定,也可以通过二维高斯函数生成。
    % 这里是高斯函数生成
    clear;
    clc;
    img = imread('D:/Code/Image/classic.jpg');
    img = rgb2gray(img);
    figure, imshow(img);
    
    % 1, 生成二维高斯模板,sigmma为1
    img = double(img);
    sigmma = 1;
    G = zeros(size(img)); % 生成和图片一样大的空模板
    [row, col] = size(G);
    center_row = round(row/2); % 二维高斯函数图像的中心点
    center_col = round(col/2);
    for i = 1:row         
        for j = 1:col
            G(i, j) = (1 / (2*pi*sigmma^2)) * exp(- ((i-center_row)^2 + (j-center_col)^2) / (2*sigmma^2));
        end
    end
    
    % 查看生成的高斯函数图像
    G = mat2gray(G);
    figure,surf(G);
    
    % 2, 截取模板大小5x5
    G_kernel = G(center_row-2:center_row+2, center_col-2:center_col+2);
    
    % 3, 滤波
    new_img = zeros(row, col);
    for i = 3:row-2
        for j = 3:col-2
            new_img(i, j) = sum(sum(img(i-2:i+2, j-2:j+2) .* G_kernel));
        end
    end
    
    new_img = mat2gray(new_img);
    figure,imshow(new_img);

    2. C++实现:

    #include <opencv2/opencv.hpp>
    #include <math.h>  //pow
    using namespace cv;
    using namespace std;
    
    #define pi 3.1415926
    
    int main()
    {
    	Mat img = imread("D:/Code/Image/classic.jpg", 0);
    	imshow("原图", img);
    
    	// 1,利用高斯函数生成模板
    	double sigmma = 1.0;
    	int size = 5;
    	int center_row = round(size / 2); // 0, 1, 2, 3, 4
    	int center_col = round(size / 2);
    
    	// 给5x5矩阵赋值
    	double sum_value = 0.0;
    	Mat kernel = Mat::zeros(Size(5, 5), CV_64F);
    	for (int i = 0; i < size; i++)
    	{
    		for (int j = 0; j < size; j++)
    		{
    			kernel.at<double>(i, j) = 1 / (2 * pi*pow(sigmma, 2)) *
    				exp(-(pow(i - center_row, 2) + pow(j - center_col, 2)) / (2 * pow(sigmma, 2)));
    			sum_value += kernel.at<double>(i, j);
    		}
    	}
    
    	// gaussain核内的值和为1
    	for (int i = 0; i < size; i++) 
    	{
    		for (int j = 0; j < size; j++)
    		{
    			kernel.at<double>(i, j) = kernel.at<double>(i, j) / sum_value;
    			//cout << G_kernel[i][j] << endl;
    		}
    	}
    	//normalize(kernel, kernel, 1, 0, NORM_MINMAX);
    	//cout << kernel;
    	// 2,卷积
    	Mat new_img = Mat::zeros(img.size(), CV_64F);
    	for (int i = 2; i < img.rows-2; i++)
    	{
    		for (int j = 2; j < img.cols-2; j++)
    		{
    			//cout << 'i ' << i << 'j ' << j <<endl;
    			Mat roi1;
    			cv::Mat m_roi = img(cv::Range(i-2, i+3), cv::Range(j-2, j+3));
    			m_roi.convertTo(roi1, CV_64F);  // 数据类型变换为double
    
    			new_img.at<double>(i, j) = roi1.dot(kernel); // 点乘需要相同数据类型,不同于matlab,这里会求和
    		}
    	}
    	
    	new_img.convertTo(new_img, CV_8UC1);
    	imshow("效果图", new_img);
    	waitKey(0);
    }

    知识点:

    1) Kernel 内的数据 要定义为double类型: 

    Mat kernel = Mat::zeros(Size(5, 5), CV_64F);

    2)opecv的点乘操作,需要两个mat内的数据都是同类型:

    new_img.at<double>(i, j) = roi1.dot(kernel); // 点乘需要相同数据类型,不用于matlab,这里会自动求和

    3)Mat内保存的数据类型转化:

    m_roi.convertTo(roi1, CV_64F);  // 数据类型变换为double

    4)图像显示,需要将生成的Mat转化成8UC1类型:

    new_img.convertTo(new_img, CV_8UC1);
    imshow("效果图", new_img);

    5)Mat类数据归一化到0到1之间:

    normalize(kernel, kernel, 1, 0, NORM_MINMAX);  % 最好加上NORM_MINMAX

    6)寻找矩阵Mat中最值及其位置:

    double min, max;   // 检测最大值是否为1
    Point minPt, maxPt;
    minMaxIdx(kernel, &min, &max);
    minMaxLoc(kernel, &min, &max, &minPt, &maxPt);

    7)生成高斯核后,也可以自带函数简单直接卷积:

    filter2D(img, new_img, img.depth(), kernel);

    8)二维数组定义方式:

    double **G_kernel = new double *[size];  // gaus为指针的指针,即指针指向的是一个指针,右边生成的是一个指针数组,数组内存放的是数组。
    for (int i = 0; i < size; i++)
    {
    	G_kernel[i] = new double[size];
    }

    9)图像矩阵内,截取块:

    Mat roi1;
    cv::Mat m_roi = img(cv::Range(i-2, i+3), cv::Range(j-2, j+3));  // 包含开始,不包含结束(即不包含i+3)
    m_roi.convertTo(roi1, CV_64F);  // 数据类型变换为double
    
    new_img.at<double>(i, j) = roi1.dot(kernel); // 点乘需要相同数据类型,不同于matlab,这里会求和

     

     

     

    展开全文
  • 基于Matlab中imfilter函数的高斯相关滤波和高斯卷积滤波 0 定义&amp;作用  高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的降噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均...

                                       基于Matlab中imfilter函数的高斯相关滤波和高斯卷积滤波

    0   定义&作用

            高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的降噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

    参考链接:https://baike.baidu.com/item/高斯滤波/9032353?fr=aladdin

     

    1  多种滤波效果比较

            图像处理中,常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。均值滤波使用模板内所有像素的平均值代替模板中心像素灰度值,这种方法易收到噪声的干扰,不能完全消除噪声,只能相对减弱噪声;中值滤波计算模板内所有像素中的中值,并用所计算出来的中值替换模板中心像素的灰度值,这种方法对噪声不是那么敏感,能够较好的消除椒盐噪声,但是容易导致图像的不连续性。高斯滤波对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值,对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。

    参考链接:https://blog.csdn.net/lz0499/article/details/54015150

     

    2  实现流程

            高斯滤波的具体实现流程:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

            在MATLAB工具中,fspecial('gaussian', hsize, sigma)函数用于产生高斯滤波掩模,imfilter(I,G,'corr/conv','replicate','same')函数用于对原始图像各像素点进行高斯滤波,imfilter()函数有相关属性滤波和卷积属性滤波两种。具体实现流程见下文所示。

    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%     基于Matlab的高斯相关滤波和高斯卷积滤波     %%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %%%% step1: 读取原始图片数据
    I = imread('lena.png');
    % figure; imshow(I);
    
    %%%% step2: 生成高斯滤波模板
    sigma = 1.5;  %设定标准差值,该值越大,滤波效果(模糊)愈明显
    window = double(uint8(3*sigma)*2 + 1);  %设定滤波模板尺寸大小
    %fspecial('gaussian', hsize, sigma)产生滤波掩模
    G = fspecial('gaussian', window, sigma);
    
    %%%% step3: 图像各像素点进行高斯滤波
    %为了不出现黑边,使用参数'replicate'(输入图像的外部边界通过复制内部边界的值来扩展)
    img_gauss_corr = imfilter(I,G,'corr','replicate','same');
    img_gauss_conv = imfilter(I,G,'conv','replicate','same');
    
    %%%% step4: 图像经高斯滤波前后对比 
    figure(1)
    imshow(I),title('原始图像');
    
    figure(2)
    subplot(1,2,1),imshow(img_gauss_corr),title('高斯相关滤波图像');
    subplot(1,2,2),imshow(img_gauss_conv),title('高斯卷积滤波图像');

    参考链接:https://blog.csdn.net/majinlei121/article/details/46652859

     

    3  结果对比

            原始图像采用经典的lenna图,图像滤波结果对比如下所示。

                                                  

                                      

             结论: 可以看出滤波后的图像变得模糊了,因为加权平均的效果。

             疑问: 由于imfilter()函数有corr和conv两种滤波属性,现阶段我明白二者的实现差异,但是我不理解基于二者滤波后,图像滤波效果有何不同?或者二者属性分别应用在哪些场合,如何选择?如果有网友知道,请指教,谢谢了!

             PS:(我是图像处理方面小白)

     

     

    展开全文
  • 如何在图像中添加标准偏差为10的高斯噪声? 最直接的方式就是使用MATLAB提供的函数imnoise(), 根据帮助文档中的调用格式 J = imnoise(I, ‘gaussian’, M, V)(M 为均值,V为方差),想当然的将语句写为J = imnoise(I,...
  • 高斯模糊的算法(高斯卷积 高斯核)

    万次阅读 多人点赞 2017-07-05 16:17:32
    "模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。 本文介绍"高斯模糊"的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑...
  • 高斯卷积核如何生成 C语言实现

    千次阅读 2017-12-07 20:30:37
    对于学图像专业的人来说,对图像进行高斯滤波应该不会陌生,本质上就是将图像...matlab中有函数能自动生成高斯卷积核:  gs=fspecial('gaussian',3,1)  gs =  0.0751 0.1238 0.0751  0.1238 0.2042 0.1238
  • 高斯卷积滤波器应用于矩阵(例如白噪声)以引入空间相关性同时(通常)保留原始分布的简单脚本。 根据 Oksanen 和 Sarjakoski 2005 的空间移动平均方法:基于 DEM 的流域盆地划分的误差传播分析。 国际遥感杂志 26...
  • matlab实现图像的高斯滤波

    万次阅读 多人点赞 2019-04-23 16:09:08
    高斯滤波的含义:高斯滤波就是对整幅图像进行加权平均的过程,每一...高斯滤波的作用:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 高斯滤波函数 一维高斯分布 二维高斯分...
  • 卷积码的matlab仿真

    2016-04-28 13:27:07
    采用matlab仿真了卷积编码在BPSK调制下通过AWGN信道是的性能分析。包含不同参数下卷积码的误码率曲线比较,包括'未使用编码'与'使用卷积编码'的比较,不同回溯长度、不同码率、不同约束长度的误码率曲线
  • 通过更换来实现平滑具有傅立叶系数的空间域卷积乘法。 这也是实现您的目标的一个很好的例子使用原生傅立叶表达式自己的过滤器。 R = gauss3filter(I); R = gauss3filter(I, sigma); R = gauss3filter(I, sigma, ...
  • 问题 3 图像二维卷积函数 (20 分) 实现一个函数 g = twodConv(f, w), 其中 f 是一个灰度源图像,w 是一个矩形卷积核。要求输 出图像 g 与源图像 f 大小(也就是像素的行数和列数)一致。请注意,为满足这一要求,对...
  • 高斯卷积,还不错程序,可以自己进行改动,也可以傻瓜操作,比oringin的好多了
  • 卷积滤波器matlab代码图像卷积实验室 MATLAB编码 该实验室实现了灰度图像的图像卷积,在许多计算机视觉系统(例如,用于边缘检测)和大多数图像编辑程序(例如Photoshop)(例如,用于图像锐化)中实现的基本图像...
  • 图像处理中的卷积---2.高斯卷积

    千次阅读 2015-11-26 16:36:27
    经过上面一篇博文,介绍了卷积的意义。 那么图像处理中的卷积可以...下面我们给出gaussian kernel做卷积的例子,另附MATLAB实现方法。 sigma = 3;% you can set the sigma yourself Wx = floor(3*sigma
  • 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比: a) 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. b) 均值滤波是典型的线性滤波算法...
  • 图像处理程序经常会用到卷积操作,即用一个模板在图像上滑动并与模板下的图像内做 乘加操作,如高斯滤波。传统的做法是循环套循环的方式来写法,但在matlab中循环操作 很慢,为加快执行速度要尽量避免循环操作。 1:...
  • 首先,介绍一下梯度的概念:梯度是一个由函数沿各分项导数...现在我们介绍另外一种基于卷积特性的导数计算方法,由于卷积具有以下性质,[2] [2] 因而,在图像处理中,一般对gaussian kernel计算导数,得到gd ker
  • 数字图像处理之高斯模板(高斯滤波)的实现
  • matlab高斯滤波器

    万次阅读 热门讨论 2017-07-26 16:00:33
    1、使用matlab自带的函数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; img = imread('lena.tif'); w = fspecial('gaussian',[5,5],1); %replicate:图像大小通过赋值外边界的值来扩展 %...
  • 高斯模糊 matlab

    万次阅读 2018-03-20 20:22:00
    close all;image = imread('66_input.png');figure(1),imshow(image);w=fspecial('gaussian',[5 5],5);im=imfilter(image,w);figure(2),imshow(im);...fspecial第一个参数为高斯类型的滤波算子,核的宽度尺寸...
  • 此函数绘制高斯脉冲响应、单位脉冲和使用 MATLAB 的“过滤器”对两者进行 % 卷积/反卷积。 具体来说% 它使用 'filter' 而不是 'deconv' 来进行反卷积,从而%返回原始的高斯向量以及单位响应向量。 % 向量长度在所有...
  • 不是那种直接用函数的 是把一个卷积核通过旋转-平移-相乘-求和这四步后得到的 求代码段
  • Matlab:盲反卷积还原失焦图像

    万次阅读 多人点赞 2018-05-17 08:39:25
    Matlab:盲反卷积还原失焦图像 目录 输出结果 实现代码 输出结果 实现代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 盲反卷积还原失焦图像 % % % %%%%%%%%%%%%...
  • 两个高斯函数的卷积为一新的高斯函数,新高斯函数的方差为原来两个高斯函数方差的和。 基于此,就百度搜了搜两个高斯函数的卷积,发觉都是只给结论,没有给出理论过程。那就只能自己推导了。 对于以下高斯函数 : ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,548
精华内容 1,819
关键字:

高斯卷积matlab

matlab 订阅