高斯金字塔的matlab实现

合集下载

matlab高斯赛德尔迭代法

matlab高斯赛德尔迭代法

标题:深入探讨MATLAB中的高斯-赛德尔迭代法一、概述MATLAB是一种强大的数学计算软件,被广泛应用于科学、工程和金融等领域。

在数值分析中,迭代法是解决非线性方程组和矩阵方程组的重要方法之一。

高斯-赛德尔迭代法是其中的一种,其在求解线性方程组时具有较好的收敛性和效率。

本文将深入探讨MATLAB中高斯-赛德尔迭代法的原理和实现方法。

二、高斯-赛德尔迭代法原理高斯-赛德尔迭代法是一种求解线性方程组的迭代法。

给定线性方程组Ax=b,其中A为系数矩阵,b为常数向量,迭代法的基本思想是通过不断逼近方程组的解x。

高斯-赛德尔迭代法的迭代公式如下:\[ x^{(k+1)} = D^{-1} (b - (L+U)x^{(k)}) \]其中,D、L和U分别为系数矩阵A的对角线、严格下三角部分和严格上三角部分。

迭代法的初始值可以任意选择,通常选取一个与解接近的初值,然后通过迭代逼近真实解。

三、MATLAB中高斯-赛德尔迭代法的实现MATLAB提供了丰富的数值计算函数和工具箱,使得高斯-赛德尔迭代法的实现变得非常简单。

下面我们将介绍如何在MATLAB中使用高斯-赛德尔迭代法求解线性方程组。

1. 设置参数在使用高斯-赛德尔迭代法之前,我们首先需要设置一些参数,如系数矩阵A、常数向量b、迭代步数等。

在MATLAB中可以通过定义变量来实现这些参数的设置。

2. 编写迭代函数接下来,我们需要编写高斯-赛德尔迭代法的迭代函数。

通过编写一个MATLAB函数来实现迭代公式的计算和迭代过程的控制。

3. 调用函数求解完成迭代函数的编写后,我们就可以通过调用该函数来求解线性方程组。

在MATLAB中,可以使用循环语句控制迭代步数,并在每一步更新迭代值,直到满足收敛条件为止。

四、案例分析为了更好地理解高斯-赛德尔迭代法在MATLAB中的应用,我们以一个具体的案例来进行分析和实践。

假设我们需要求解以下线性方程组:\[ \begin{cases} 4x_1 - x_2 + x_3 = 8 \\ -x_1 + 4x_2 - x_3 = 9 \\2x_1 - x_2 + 5x_3 = 7 \end{cases} \]我们可以通过MATLAB编写高斯-赛德尔迭代法的函数,并调用该函数来求解以上线性方程组。

sift算法matlab复杂代码

sift算法matlab复杂代码

一、介绍SIFT算法SIFT(Scale-Invariant Feature Transform)算法是一种用于图像处理和计算机视觉领域的特征提取算法,由David Lowe在1999年提出。

SIFT算法具有旋转、尺度、光照等方面的不变性,能够对图像进行稳健的特征点提取,被广泛应用于物体识别、图像匹配、图像拼接、三维重建等领域。

二、SIFT算法原理SIFT算法的主要原理包括尺度空间极值点检测、关键点定位、关键点方向确定、关键点描述等步骤。

其中,尺度空间极值点检测通过高斯差分金字塔来检测图像中的极值点,关键点定位则利用DoG响应函数进行关键点细化,关键点方向确定和关键点描述部分则通过梯度方向直方图和关键点周围区域的梯度幅度信息来完成。

三、使用Matlab实现SIFT算法在Matlab中实现SIFT算法,需要对SIFT算法的每个步骤进行详细的编程和调试。

需要编写代码进行图像的高斯金字塔和高斯差分金字塔的构建,计算尺度空间极值点,并进行关键点定位。

需要实现关键点的方向确定和描述子生成的算法。

将所有步骤整合在一起,完成SIFT算法的整体实现。

四、SIFT算法复杂代码的编写SIFT算法涉及到的步骤较多,需要编写复杂的代码来实现。

在编写SIFT算法的Matlab代码时,需要考虑到算法的高效性、可扩展性和稳定性。

具体来说,需要注意以下几点:1. 高斯差分金字塔和高斯金字塔的构建:在构建高斯差分金字塔时,需要编写代码实现图像的高斯滤波和图像的降采样操作,以得到不同尺度空间的图像。

还需要实现高斯差分金字塔的构建,以检测图像中的极值点。

2. 尺度空间极值点检测:在检测图像中的极值点时,需要编写代码实现对高斯差分金字塔的极值点检测算法,以找到图像中的潜在关键点。

3. 关键点的定位:关键点定位阶段需要编写代码实现对尺度空间极值点的精确定位,消除低对比度点和边缘响应点,并进行关键点的精细化操作。

4. 关键点的方向确定和描述子生成:在这一步骤中,需要编写代码实现对关键点周围区域的梯度幅度信息的计算和关键点方向的确定,以及生成关键点的描述子。

matlab高斯数值积分

matlab高斯数值积分

MATLAB高斯数值积分在数值计算中,高斯数值积分(Gaussian numerical integration)是一种常用的数值积分方法。

它基于高斯求积公式,通过在给定区间上选择合适的节点和权重来近似计算积分值。

在MATLAB中,高斯数值积分可以通过内置函数或自定义函数来实现。

高斯数值积分的原理高斯数值积分的核心思想是通过在积分区间上选择合适的节点和权重,将被积函数转化为节点和权重的线性组合,从而实现对积分值的近似计算。

在一维情况下,高斯数值积分的基本公式为:I=∫fba (x)dx≈∑w ini=1f(x i)其中,a和b分别为积分区间的上下限,n为节点的个数,x i为节点,w i为节点对应的权重。

高斯数值积分通过选择合适的节点和权重,能够在一定程度上提高积分的精度。

常用的高斯数值积分方法包括高斯-勒让德求积、高斯-拉盖尔求积和高斯-埃尔米特求积等。

MATLAB中的高斯数值积分函数在MATLAB中,可以使用内置函数integral来进行高斯数值积分。

integral函数的基本语法如下:Q = integral(fun,a,b)其中,fun为被积函数的句柄,a和b为积分区间的上下限,Q为近似计算得到的积分值。

integral函数会根据被积函数的特性自动选择合适的高斯求积公式,并计算出积分值。

如果被积函数在积分区间上有奇点或不连续点,可以通过指定'Waypoints'参数来处理。

除了使用内置函数,我们还可以自定义高斯数值积分函数来实现更灵活的积分计算。

下面是一个自定义高斯数值积分函数的示例:function Q = gauss_integration(fun,a,b,n)[x,w] = gauss_nodes_weights(n,a,b); % 获取节点和权重Q = sum(w .* fun(x)); % 计算积分值end在自定义函数中,我们需要提供被积函数的句柄fun、积分区间的上下限a和b,以及节点的个数n。

gauss-seidel迭代法例题matlab代码

gauss-seidel迭代法例题matlab代码

【题目】:Gauss-Seidel迭代法及Matlab代码实例【内容】:1. Gauss-Seidel迭代法介绍Gauss-Seidel迭代法是一种用于解线性方程组的数值方法,基于逐次逼近的思想,通过不断迭代逼近线性方程组的解。

该方法通常用于求解大型稀疏线性方程组,其收敛速度相对较快。

2. 迭代公式推导假设有如下线性方程组:$$Ax=b$$其中A为系数矩阵,b为常数向量,x为未知向量。

Gauss-Seidel迭代法的迭代公式为:$$x^{(k+1)}=(D+L)^{-1}(b- Ux^{(k)})$$其中,D为A的对角矩阵,L为A的严格下三角矩阵,U为A的严格上三角矩阵,k为迭代次数。

3. Matlab代码实现下面给出Gauss-Seidel迭代法的Matlab代码实例:```matlabfunction [x, k] = gaussSeidel(A, b, x0, tol, maxIter)A: 系数矩阵b: 常数向量x0: 初始解向量tol: 容差maxIter: 最大迭代次数x: 解向量k: 迭代次数n = length(b);x = x0;k = 0;while k < maxIterx_old = x;for i = 1:nx(i) = (b(i) - A(i,1:i-1)*x(1:i-1) - A(i,i+1:n)*x_old(i+1:n)) / A(i,i); endif norm(x - x_old, inf) < tolreturnendk = k + 1;enddisp('迭代次数达到最大值,未达到容差要求'); end```4. 应用实例假设有如下线性方程组:$$\begin{cases}2x_1 - x_2 + x_3 = 5\\-x_1 + 2x_2 - x_3 = -2\\x_1 - x_2 + 2x_3 = 6\end{cases}$$系数矩阵A为:$$\begin{bmatrix}2 -1 1\\-1 2 -1\\1 -1 2\end{bmatrix}$$常数向量b为:$$\begin{bmatrix}5\\-2\\6\end{bmatrix}$$取初始解向量x0为:$$\begin{bmatrix}0\\0\\\end{bmatrix}$$容差tol为1e-6,最大迭代次数maxIter为100。

高斯投影反算matlab

高斯投影反算matlab

高斯投影反算matlab高斯投影反算是地理信息系统中的重要计算方法,通过已知的高斯投影坐标,计算出对应的地理经纬度坐标。

在Matlab中,我们可以使用一些内置函数来实现高斯投影反算,方便地进行空间坐标转换和分析。

高斯投影反算的本质是将平面坐标系转换为大地坐标系,从而实现平面上的测量和分析。

在地理信息系统中,常用的高斯投影反算方法有高斯-克吕格投影反算和高斯-克吕格-赤道投影反算。

下面我们将分别介绍这两种方法在Matlab中的实现。

我们来介绍高斯-克吕格投影反算。

在Matlab中,可以使用geotiffinfo函数读取高斯投影的tiff格式地图文件,并获取地图的投影信息。

然后,使用mapshow函数显示地图,并使用ginput 函数获取鼠标点击点的像素坐标。

接下来,可以使用imtransform 函数将像素坐标转换为投影坐标。

最后,使用projinv函数将投影坐标转换为地理经纬度坐标。

通过这些步骤,我们可以实现高斯-克吕格投影反算。

接下来,我们介绍高斯-克吕格-赤道投影反算。

在Matlab中,可以使用utmgeoid函数将地理经纬度坐标转换为UTM投影坐标。

然后,使用utmzone函数获取UTM投影的区域。

接着,使用utm2ell函数将UTM投影坐标转换为椭球坐标。

最后,使用ell2xyz函数将椭球坐标转换为空间直角坐标。

通过这些步骤,我们可以实现高斯-克吕格-赤道投影反算。

在实际应用中,高斯投影反算常常用于地图测绘、导航定位和空间分析等领域。

例如,在地图测绘中,可以利用高斯投影反算将地理经纬度坐标转换为平面坐标,从而实现地图的绘制和更新。

在导航定位中,可以利用高斯投影反算将平面坐标转换为地理经纬度坐标,从而实现定位和导航功能。

在空间分析中,可以利用高斯投影反算将不同投影坐标之间进行转换,从而实现空间数据的整合和分析。

高斯投影反算是地理信息系统中常用的计算方法之一,通过将平面坐标系转换为大地坐标系,实现了地理经纬度坐标和投影坐标之间的转换。

拉普拉斯金字塔图像融合的具体matlab程序

拉普拉斯金字塔图像融合的具体matlab程序

function lap_fusion()%Laplacian Pyramid fusionmul= imread('images\ms1.png');pan= imread('images\pan.png');figure(1);imshow(mul);title('MS原始图像');axis fill;figure(2);imshow(pan);title('Pan原始图像');axis fill;mul = double(rgb2gray(mul))/255;pan = double(rgb2gray(pan))/255;%普拉斯金塔变换参数mp = 1;zt =4; cf =1;ar = 1; cc = [cf ar];Y_lap = fuse_lap(mul,pan,zt,cc,mp);figure(3);imshow(Y_lap);title('lap fusion 后的图像');axis fill;imwrite(Y_lap,'images\lap fusion后的图像.jpg','Quality',100);%main function endfunction Y = fuse_lap(M1, M2, zt, ap, mp)%Y = fuse_lap(M1, M2, zt, ap, mp) image fusion with laplacian pyramid %% M1 - input image A% M2 - input image B% zt - maximum decomposition level% ap - coefficient selection highpass (see selc.m)% mp - coefficient selection base image (see selb.m)%% Y - fused image% (Oliver Rockinger 16.08.99)% check inputs[z1 s1] = size(M1);[z2 s2] = size(M2);if (z1 ~= z2) | (s1 ~= s2)error('Input images are not of same size');end;% define filterw = [1 4 6 4 1] / 16;% cells for selected imagesE = cell(1,zt);% loop over decomposition depth -> analysisfor i1 = 1:zt% calculate and store actual image size[z s] = size(M1);zl(i1) = z; sl(i1) = s;% check if image expansion necessaryif (floor(z/2) ~= z/2), ew(1) = 1; else, ew(1) = 0; end;if (floor(s/2) ~= s/2), ew(2) = 1; else, ew(2) = 0; end;% perform expansion if necessaryif (any(ew))M1 = adb(M1,ew);M2 = adb(M2,ew);end;% perform filteringG1 = conv2(conv2(es2(M1,2), w, 'valid'),w', 'valid');G2 = conv2(conv2(es2(M2,2), w, 'valid'),w', 'valid');% decimate, undecimate and interpolateM1T = conv2(conv2(es2(undec2(dec2(G1)), 2), 2*w, 'valid'),2*w', 'valid'); M2T = conv2(conv2(es2(undec2(dec2(G2)), 2), 2*w, 'valid'),2*w', 'valid');% select coefficients and store themE(i1) = {selc(M1-M1T, M2-M2T, ap)};% decimateM1 = dec2(G1);M2 = dec2(G2);end;% select base coefficients of last decompostion stageM1 = selb(M1,M2,mp);% loop over decomposition depth -> synthesisfor i1 = zt:-1:1% undecimate and interpolateM1T = conv2(conv2(es2(undec2(M1), 2), 2*w, 'valid'), 2*w', 'valid'); % add coefficientsM1 = M1T + E{i1};% select valid image regionM1 = M1(1:zl(i1),1:sl(i1));end;。

MATLAB中的图像增强与图像修复方法

MATLAB中的图像增强与图像修复方法

MATLAB中的图像增强与图像修复方法近年来,随着数字图像处理技术的迅速发展,图像的质量得到了大幅度的提升。

而在图像的处理过程中,图像增强和图像修复是两个重要的技术领域。

在本文中,我们将探讨MATLAB中的图像增强和图像修复方法。

一、图像增强方法图像增强旨在改善图像的质量和视觉效果,使其更适合人眼观察和分析。

在MATLAB中,有多种图像增强方法可供选择。

1. 直方图均衡化直方图均衡化是一种常用的增强方法,通过重新分布图像的像素值,以增加图像的对比度。

在MATLAB中,可以使用`histeq`函数来实现直方图均衡化。

该函数将图像的直方图调整为均匀分布,从而提高了图像的视觉效果。

2. 拉普拉斯金字塔拉普拉斯金字塔是一种多尺度图像增强方法,可以在不同的尺度上提取图像的细节信息。

在MATLAB中,可以使用`pyramid_blending`函数来构建拉普拉斯金字塔。

该函数将图像分为不同的层级,然后通过合并各个层级的细节信息来增强图像的效果。

3. 双边滤波双边滤波是一种通过保持边缘信息的图像增强方法,在去除图像噪声的同时也能保留图像的边缘细节。

在MATLAB中,可以使用`bfilter2`函数来实现双边滤波。

该函数通过同时考虑像素的空间和灰度信息来进行滤波,从而提高图像的质量。

二、图像修复方法图像修复是指通过恢复被损坏或受到噪声污染的图像,使之恢复到原本的状态。

在MATLAB中,也有多种图像修复方法可供选择。

1. 傅里叶变换傅里叶变换是一种广泛应用于图像修复的数学方法。

通过将图像转换到频域,并进行频域滤波操作,可以去除图像中的噪声和损坏部分。

在MATLAB中,可以使用`fft2`和`ifft2`函数来进行傅里叶变换和逆傅里叶变换,从而实现图像的修复。

2. 小波变换小波变换是一种基于多尺度分析的图像修复方法,可以在不同的尺度上提取图像的细节信息。

在MATLAB中,可以使用`wavelet denoise`函数来进行小波变换修复。

gauss在matlab的程序编写

gauss在matlab的程序编写

1.高斯消元法function [x]=mgauss(A,b,flag)ticif nargin<3,flag=0;endn=length(b);for k=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endtoc2.程序验证n=6;>> r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);>> x=mgauss(a,b)Elapsed time is 0.000000 seconds.x =1.00001.00001.00001.00001.00001.0000n=100;r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);x=mgauss(a,b) Elapsed time is 0.015000 seconds.x =1.00001.00001.00001.00001.00001.00001.0000function [RA,RB,x]=gaus(A,b,flag)ticif nargin<3,flag=0;endB=[A b]; n=length(b); RA=rank(A);RB=rank(B);if RB-RA>0disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')for k=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endendtoc程序验证n=100; r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);[ra,rb,x]=gaus(a,b) 请注意:因为RA=RB=n,所以此方程组有唯一解.Elapsed time is 0.032000 seconds.ra =100rb =100x =1.00001.00001.00001.00001.00001.0000图形2.LU分解程序function[l,u,x]=mlu(a,b)ticn=length(b);l=zeros(n);u=zeros(n);x=zeros(n,1);y=zeros(n,1); for k=1:nu(k,k:n)=a(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k:n,k)=(a(k:n,k)-l(k:n,1:k-1)*u(1:k-1,k))/u(k,k);l(k,k)=1;endfor k=1:ny(k)=b(k)-l(k,1:k-1)*y(1:k-1);endfor k=n:-1:1x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);endtoc验证n=6,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n =6r =0.8462 0.6813 0.3046 0.1509 0.4966 0.34200.5252 0.3795 0.1897 0.6979 0.8998 0.28970.2026 0.8318 0.1934 0.3784 0.8216 0.34120.6721 0.5028 0.6822 0.8600 0.6449 0.53410.8381 0.7095 0.3028 0.8537 0.8180 0.72710.0196 0.4289 0.5417 0.5936 0.6602 0.3093 Elapsed time is 0.000000 seconds.l =1.0000 0 0 0 0 00.2303 1.0000 0 0 0 00.1367 0.1246 1.0000 0 0 00.2291 0.1977 0.1438 1.0000 0 00.2676 0.2622 0.1441 0.2122 1.0000 00.1814 0.1540 0.0926 0.1288 0.1104 1.0000u =8.1875 1.8854 1.1195 1.8760 2.1912 1.48510 7.8060 0.9728 1.5430 2.0464 1.20180 0 6.7424 0.9694 0.9715 0.62430 0 0 7.5994 1.6123 0.97890 0 0 0 7.6472 0.84410 0 0 0 0 6.4954 x =1.00001.00001.00001.00001.00001.0000n=90,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n =90r =Columns 1 through 90.8385 0.0164 0.4199 0.2731 0.8518 0.6859 0.8686 0.5152 0.19300.5681 0.1901 0.7537 0.6262 0.7595 0.6773 0.6264 0.6059 0.90960.3704 0.5869 0.7939 0.536x =1.00001.00001.00001.00001.0000经验证是正确的,太长了只节了部分。

高斯过程的matlab程序实现

高斯过程的matlab程序实现

高斯过程的matlab程序实现高斯过程作为一种强大的建模工具,广泛应用于各种领域,如机器学习、统计学、信号处理等。

Matlab作为一种功能强大的编程语言和计算软件,在高斯过程的实现方面提供了很好的支持。

本文将介绍高斯过程的基本理论和Matlab程序实现,以帮助读者了解和应用这一工具。

一、高斯过程基本理论高斯过程(Gaussian Process,简称GP)是一种用于处理连续随机变量的方法,它是一组无限个随机变量的集合,任意一组随机变量的联合分布都是高斯分布,且每个随机变量是对其他随机变量的线性组合。

也就是说,高斯过程可以看作是高斯分布的一个推广,它不再是单个随机变量的分布,而是一组随机变量的联合概率分布。

高斯过程的定义如下:设X是定义在D上的高斯过程,当对于任意的n个点$x_1,x_2,...,x_n$,其联合分布$(X(x_1),X(x_2),...,X(x_n))$服从高斯分布,且其均值向量为0,协方差矩阵为$K(x_i,x_j)$ ,即:$$\begin{bmatrix}X(x_1)\\X(x_2)\\\vdots\\X(x_n)\end{bmatrix} \sim\mathbb{N}\left(\begin{bmatrix}0\\0\\\vdots\\0\end{bmatrix}, \begin{bmatrix}K(x_1,x_1) &K(x_1,x_2) & \cdots & K(x_1,x_n)\\ K(x_2,x_1) &K(x_2,x_2) & \cdots & K(x_2,x_n)\\ \vdots & \vdots & \ddots & \vdots\\ K(x_n,x_1) & K(x_n,x_2) &\cdots & K(x_n,x_n)\end{bmatrix}\right)$$其中,协方差函数$K(x_i,x_j)$的选择是高斯过程的核心,直接影响着高斯过程的性质和应用效果。

生成高斯分布的matlab程序

生成高斯分布的matlab程序

clear all;close all;clc;randn('seed',0);%%一维高斯函数mu=0;sigma=1;x=-6:0.1:6;y=normpdf(x,mu,sigma);plot(x,y);figure;%%二维或多维高斯函数mu=[00];sigma=[0.30;00.35];[x y]=meshgrid(linspace(-8,8,80)',linspace(-8,8,80)');X=[x(:) y(:)];z=mvnpdf(X,mu,sigma);surf(x,y,reshape(z,80,80));hold on;%再生成一个mu=[40];sigma=[1.20;0 1.85];[x y]=meshgrid(linspace(-8,8,80)',linspace(-8,8,80)');X=[x(:) y(:)];z=mvnpdf(X,mu,sigma);surf(x,y,reshape(z,80,80));Matlab 的随机函数(高斯分布均匀分布其它分布)Matlab中随机数生成器主要有:betarnd 贝塔分布的随机数生成器binornd 二项分布的随机数生成器chi2rnd 卡方分布的随机数生成器exprnd 指数分布的随机数生成器frnd f分布的随机数生成器gamrnd 伽玛分布的随机数生成器geornd 几何分布的随机数生成器hygernd 超几何分布的随机数生成器lognrnd 对数正态分布的随机数生成器nbinrnd 负二项分布的随机数生成器ncfrnd 非中心f分布的随机数生成器nctrnd 非中心t分布的随机数生成器ncx2rnd 非中心卡方分布的随机数生成器normrnd 正态(高斯)分布的随机数生成器,normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵poissrnd 泊松分布的随机数生成器rand:产生均值为0.5、幅度在0~1之间的伪随机数,rand(n):生成0到1之间的n阶随机数方阵,rand(m,n):生成0到1之间的m×n的随机数矩阵randn:产生均值为0、方差为1的高斯白噪声,使用方式同rand注:rand是0-1的均匀分布,randn是均值为0方差为1的正态分布randperm(n):产生1到n的均匀分布随机序列raylrnd 瑞利分布的随机数生成器trnd 学生氏t分布的随机数生成器unidrnd 离散均匀分布的随机数生成器unifrnd 连续均匀分布的随机数生成器weibrnd 威布尔分布的随机数生成器-----------------------------------------------------------------以下介绍利用Matlab产生均值为0,方差为1的符合正态分布的高斯随机数。

拉普拉斯金字塔 matlab函数

拉普拉斯金字塔 matlab函数

拉普拉斯金字塔是一种图像金字塔的变种,它用于图像处理中的特征提取和目标检测。

在Matlab中,可以使用laplacian函数来创建拉普拉斯金字塔。

本文将介绍拉普拉斯金字塔的原理和Matlab函数的使用方法,帮助读者了解拉普拉斯金字塔在图像处理中的应用。

一、拉普拉斯金字塔原理1. 拉普拉斯金字塔是图像金字塔的一种,它可以通过对原始图像进行高斯平滑和下采样得到。

与高斯金字塔不同的是,拉普拉斯金字塔是通过对原始图像进行高斯平滑后的图像与原始图像的卷积差来构建的。

2. 拉普拉斯金字塔的构建过程包括先对原始图像进行高斯平滑,然后对平滑后的图像进行下采样,再对下采样后的图像进行上采样,最后得到图像的拉普拉斯金字塔。

二、Matlab中的laplacian函数在Matlab中,可以使用laplacian函数来创建拉普拉斯金字塔。

laplacian函数的语法如下:LP = laplacian(A, levels)其中,A表示输入的原始图像,levels表示金字塔的层数。

该函数将返回拉普拉斯金字塔的层数。

三、使用示例下面通过一个示例来演示如何使用Matlab中的laplacian函数来创建拉普拉斯金字塔。

```matlab读取原始图像I = imread('lena.jpg');创建拉普拉斯金字塔LP = laplacian(I, 5);显示金字塔图像figure;for i = 1:5subplot(1, 5, i);imshow(LP{i}, []);title(['Level ', num2str(i)]);end```在上面的示例中,首先读取了一张名为lena.jpg的原始图像。

然后使用laplacian函数创建了一个5层的拉普拉斯金字塔LP。

最后使用subplot和imshow函数将金字塔的每一层图像显示出来。

四、总结本文介绍了拉普拉斯金字塔的原理和在Matlab中的使用方法。

高斯变异matlab

高斯变异matlab

高斯变异matlab全文共四篇示例,供读者参考第一篇示例:高斯变异是一种统计学上常用的方法,主要用于描述随机变量之间的相关性以及方差的变化。

在实际应用中,高斯变异通常用于模拟数据的变异性,帮助分析师更好地理解数据的分布规律,进而进行进一步的统计推断和预测。

在Matlab中,高斯变异可以通过调用相关的函数来实现。

首先,我们需要了解高斯变异的概念和数学表达式。

高斯变异是一种二次型变异方法,通常用于计算一个空间中不同点之间的相关性。

其数学表达式为:$$γ(h)=σ^2*(1−e^{−3(h/a)})$$其中,$γ(h)$表示样本点之间的变异性,$σ^2$表示样本的总方差,$h$表示样本点之间的距离,$a$为变异程度的比例参数。

在Matlab中,我们可以通过使用`variogram`函数来计算高斯变异。

首先,我们需要准备一组实验数据,然后使用`variogram`函数来计算不同点之间的变异性。

具体的步骤如下:1. 假设我们有一组数据`data`,其中包含了样本点的坐标和数值信息。

2. 定义一个变异数组`vario`,用于存储每个样本点之间的变异性。

3. 调用`variogram`函数,计算变异性。

```matlab% 定义参数sigma_sq = var(data); % 计算总方差a = 1; % 设定比例参数% 计算变异性for i = 1:length(data)for j = 1:length(data)h = norm(data(i,1:2)-data(j,1:2)); % 计算距离vario(i,j) = sigma_sq*(1-exp(-3*(h/a)));endend```通过上述代码,我们可以计算出不同点之间的高斯变异性,进而分析数据点的相关性和方差的变化。

这对于数据分析和空间建模有着重要的意义,可以帮助我们更好地理解数据的特征和规律。

在实际应用中,高斯变异常常用于地质勘探、环境模拟、医学研究等领域。

高斯变异matlab

高斯变异matlab

高斯变异matlab全文共四篇示例,供读者参考第一篇示例:高斯变异是一种常见的用于数据处理和模型拟合的方法,它在统计学和机器学习等领域中被广泛应用。

在MATLAB中,高斯变异可以通过一些内置函数来实现,如fitrgp和fitcecoc。

本文将介绍高斯变异的基本概念和在MATLAB中的应用。

高斯变异是一种回归分析方法,它根据已有的数据来预测未知数据的值。

在高斯变异中,数据被假设为由一个或多个高斯分布生成的,因此预测的结果也服从高斯分布。

这种方法最大的优点是可以利用已有数据的信息来准确地估计未知数据的值,并给出一个可靠的预测范围。

在MATLAB中,我们可以使用fitrgp函数来构建高斯过程回归模型。

这个函数可以根据输入的训练数据来拟合一个高斯过程模型,并返回一个用于预测的函数句柄。

我们可以这样使用fitrgp函数来拟合一个简单的正弦函数:``` matlab% 生成训练数据x = linspace(0, 2*pi, 100);y = sin(x)' + normrnd(0, 0.1, 100, 1);% 构建高斯过程回归模型gprMdl =fitrgp(x',y,'KernelFunction','squaredexponential','Standardize',1);% 绘制结果figureplot(x,y,'r.','MarkerSize',15)hold onplot(xnew,ynew,'b-','LineWidth',2)plot(xnew,ynew+2*ysd,'b--')plot(xnew,ynew-2*ysd,'b--')legend('观测数据','预测数据','95%置信区间')```在上面的例子中,我们首先生成一些训练数据,这里我们选择正弦函数并添加一些高斯噪声。

高斯模糊的实现(matlab)

高斯模糊的实现(matlab)

高斯模糊实现(matlab)高斯模糊是一种图像模糊滤波器,它用正态分布计算图像中每个像素的变换。

N 维空间正态分布方程为(1)在二维空间定义为(2)其中r 是模糊半径,指模板元素到模板中心的距离。

σ 是正态分布的标准偏差,。

在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆。

分布不为零的像素组成的卷积矩阵与原始图像做变换。

每个像素的值都是周围相邻像素值的加权平均。

原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。

这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。

1. 使用给定高斯模板平滑图像维基百科的实例高斯模糊矩阵:0.00000067 0.00002292 0.00019117 0.00038771 0.00019117 0.00002292 0.00000067 0.00002292 0.00078633 0.00655965 0.01330373 0.00655965 0.00078633 0.00002292 0.00019117 0.00655965 0.05472157 0.11098164 0.05472157 0.00655965 0.00019117 0.00038771 0.01330373 0.11098164 0.22508352 0.11098164 0.01330373 0.00038771 0.00019117 0.00655965 0.05472157 0.11098164 0.05472157 0.00655965 0.00019117 0.00002292 0.00078633 0.00655965 0.01330373 0.00655965 0.00078633 0.000022920.00000067 0.00002292 0.00019117 0.00038771 0.00019117 0.00002292 0.00000067用该矩阵进行高斯模糊的结果如下:使用代码如下:guass=[0.00000067 0.00002292 0.00019117 0.00038771 0.000191 17 0.00002292 0.00000067;0.00002292 0.00078633 0.00655965 0.01330373 0.006559650.00078633 0.00002292;0.00019117 0.00655965 0.05472157 0.11098164 0.054721570.00655965 0.00019117;0.00038771 0.01330373 0.11098164 0.22508352 0.110981640.01330373 0.00038771;0.00019117 0.00655965 0.05472157 0.11098164 0.054721570.00655965 0.00019117;0.00002292 0.00078633 0.00655965 0.01330373 0.006559650.00078633 0.00002292;0.00000067 0.00002292 0.00019117 0.00038771 0.00019117 0.00002292 0.00000067];TestImg=imread('Lena1.jpg');FuzzyImg=conv2(TestImg,guass,'full');subplot(121);imshow(TestImg);subplot(122);imshow(FuzzyImg/256);编程注意事项:在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。

高斯金字塔的matlab实现

高斯金字塔的matlab实现

对于大小为w×i 的图像I,高斯金字塔Gj 由I 的几个分辨率减小的高斯图像Ii(i是下标,下同) 组成,其中,i={0,1,...,j} 代表金字塔的级数. 图像Ii 的大小为(w/2i)×(h/2i).[2i表示2的i次方] 图像Ii 是通过对图像Ii-1(i-1是下标) 进行隔行隔列采样而得到的图.%高斯金字塔分成两步: 一对图像做高斯平滑, 二向下采样%以演示开始.后面是处理过程function memo()imbase=imread('Guas.jpg');imbase=rgb2gray(imbase);imsmooth=Guassion(imbase);im1=DownSample(imsmooth);im1=uint8(im1);imwrite(im1,'128.jpg');imsmooth=Guassion(im1);im1=DownSample(imsmooth);im1=uint8(im1);imwrite(im1,'64.jpg');imsmooth=Guassion(im1);im1=DownSample(imsmooth);im1=uint8(im1);imwrite(im1,'32.jpg');imsmooth=Guassion(im1);im1=DownSample(imsmooth);im1=uint8(im1);imwrite(im1,'16.jpg');imsmooth=Guassion(im1);im1=DownSample(imsmooth);im1=uint8(im1);imwrite(im1,'8.jpg');%一%对高斯平滑分成两步: 一得到高斯平滑函数的矩阵% 二对图像做平滑操作,对图像的边界的处理方法是对称%权值之和为零function r=GuassionMatrix(delta,radius)radius=ceil(radius);n=2*radius+1;r=zeros(n,n);%tempMatrix=zeros(radius,radius);for i=-radius:radiusfor j=-radius:radiusr(i+radius+1,j+radius+1)=exp(-(i^2+j^2)/2*delta^2);endend;r=round(100*r);r=r/sum(sum(r));function r=Guassion(im)radius=5;delta=1;GuassionSmooth=GuassionMatrix(delta,radius);%怎样把循环优化了呢---------------------------------------im=double(im);[m,n,z]=size(im);r=zeros(m,n,z);for i=1:mfor j=1:nfor k=-radius:radiusfor l=-radius:radiusx1=i+k+1;if x1<1x1=x1-2*k+1;endif x1>mx1=x1-2*k-1;endx2=j+l+1;if x2<1x2=x2-2*l+1;endif x2>nx2=x2-2*l-1;endr(i,j,:)=r(i,j,:)+im(x1,x2,:)*GuassionSmooth(k+radius+1,l+radius+1);endendendend%----------------------------------------------%向下采样function r=DownSample(im)[m,n,z]=size(im);r=zeros(m/2,n/2,z);for i=1:m/2for j=1:n/2r(i,j,:)=im(2*i,2*j,:);endend。

matlab,生成高斯图像

matlab,生成高斯图像

cl;m=31;n=31;img=zeros(m+1,n+1); %给img赋值一个(n+1)行*2列的全零矩阵img=double(img); %gdouble 就是简单地把一个变量(这里是变量img)类型转换成double 类型,数值大小不变;比如a=6 是个unit8类型的话,double(a)的结果还是6,不过现在这个6是double类型的。

pi=3.1415926;sigma=10;for i=-(m/2):m/2 %给i依次赋值-(m/2)到(m/2)之间的数,每个值都执行for循环中的代码一次。

for j=-(n/2):n/2 %给j依次赋值-(n/2)到(n/2)之间的数,每个值都执行for循环中的代码一次。

img(i+m/2+1,j+n/2+1)=(1/(2*pi*sigma*sigma))*exp(-(i*i+j*j)/(2*sigma*sigma));img(i+m/2+1,j+n/2+1)endendimg=mat2gray(img); %将图像矩阵img归一化为图像矩阵img,归一化后矩阵中每个元素的值都在0到1范围内(包括0和1)。

其中0表示黑色,1表示白色。

imshow(img); %显示img的图像imwrite(img,'pic.bmp'); %图像输出路径是%%下面的代码是对上面的代码进行另一种方式的优化h=5;w=2;[x y]=meshgrid(-w:w,-h:h); %定义数组x,y,x的行向量相当于(-w:w.-h:h),共有n行;y的列向量相当于(-w:w.-h:h),共有n列;n相当于(-w:w.-h:h)中的值的数量。

sigma=5;img = (1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2)); %定义函数img。

金字塔变换的图像融合Matlab源码

金字塔变换的图像融合Matlab源码

附录1 金字塔变换图像融合方法程序% 拉普拉斯金字塔融合函数function Y = fuse_lap(M1, M2, zt, ap, mp)% M1、M2为源图像% zt为融合层数,ap为高频子带图像选择系数,mp为低频子带图像选择系数[z1 s1] = size(M1);[z2 s2] = size(M2);if (z1 ~= z2) || (s1 ~= s2)error('输入源图像大小不一致');end;% 高斯窗口函数w = [1 4 6 4 1] / 16;E = cell(1,zt);for i1 = 1:zt[z s] = size(M1);zl(i1) = z; sl(i1) = s;% 图像尺寸为奇数还是偶数if (floor(z/2) ~= z/2), ew(1) = 1; else ew(1) = 0; end;if (floor(s/2) ~= s/2), ew(2) = 1; else ew(2) = 0; end;% 若为奇数,扩展为偶数if (any(ew))M1 = adb(M1,ew);M2 = adb(M2,ew);end;% M1与M2低通滤波G1 = conv2(conv2(es2(M1,2), w, 'valid'),w', 'valid');G2 = conv2(conv2(es2(M2,2), w, 'valid'),w', 'valid');% G1与G2下采样、上采样低通滤波后的膨胀序列M1T = conv2(conv2(es2(undec2(dec2(G1)), 2), 2*w, 'valid'),2*w', 'valid');M2T = conv2(conv2(es2(undec2(dec2(G2)), 2), 2*w, 'valid'),2*w', 'valid');% 高频子带图像系数选择E(i1) = {selg(M1-M1T, M2-M2T, ap)};% G11与G2下采样M1 = dec2(G1);M2 = dec2(G2);end;% 低频子带图像系数选择M1 = selh(M1,M2,mp);% 图像重构for i1 = zt:-1:1M1T = conv2(conv2(es2(undec2(M1), 2), 2*w, 'valid'), 2*w', 'valid');M1 = M1T + E{i1};% 选择图像有效区域M1 = M1(1:zl(i1),1:sl(i1));end;Y = M1;end;% 对比度金字塔融合函数function Y = fuse_con(M1, M2, zt, ap, mp)[z1 s1] = size(M1);[z2 s2] = size(M2);if (z1 ~= z2) | (s1 ~= s2)error('输入图像尺寸大小不一致');end;w = [1 4 6 4 1] / 16;eps = 1e-6;E = cell(1,zt);for i1 = 1:zt[z s] = size(M1);zl(i1) = z; sl(i1) = s;if (floor(z/2) ~= z/2), ew(1) = 1; else, ew(1) = 0; end;if (floor(s/2) ~= s/2), ew(2) = 1; else, ew(2) = 0; end;if (any(ew))M1 = adb(M1,ew);M2 = adb(M2,ew);end;G1 = conv2(conv2(es2(M1,2), w, 'valid'),w', 'valid');G2 = conv2(conv2(es2(M2,2), w, 'valid'),w', 'valid');M1T = conv2(conv2(es2(undec2(dec2(G1)), 2), 2*w, 'valid'),2*w', 'valid'); M2T = conv2(conv2(es2(undec2(dec2(G2)), 2), 2*w, 'valid'),2*w', 'valid'); E(i1) = {selg(M1./(M1T+eps)-1, M2./(M2T+eps)-1, ap)};M1 = dec2(G1);M2 = dec2(G2);end;M1 = selh(M1,M2,mp);for i1 = zt:-1:1M1T = conv2(conv2(es2(undec2(M1), 2), 2*w, 'valid'), 2*w', 'valid');M1 = (M1T+eps) .* (E{i1}+1);M1 = M1(1:zl(i1),1:sl(i1));end;Y = M1;end;% 梯度金字塔融合函数function Y = fuse_gra(M1, M2, zt, ap, mp)[z1 s1] = size(M1);[z2 s2] = size(M2);if (z1 ~= z2) | (s1 ~= s2)error('输入图像大小不一致');end;w = [1 4 6 4 1] / 16;v = [1 2 1] / 4;% 核函数% 梯度算子d1 = [1 -1];d2 = [0 -1; 1 0] / sqrt(2);d3 = [-1 1];d4 = [-1 0; 0 1] / sqrt(2);% 计算导数d1e = conv2(d1,d1);d1e = [zeros(1,3); d1e; zeros(1,3)];d2e = conv2(d2,d2);d3e = d1e';d4e = conv2(d4,d4);E = cell(1,zt);for i1 = 1:zt[z s] = size(M1);zl(i1) = z; sl(i1) = s;if (floor(z/2) ~= z/2), ew(1) = 1; else, ew(1) = 0; end;if (floor(s/2) ~= s/2), ew(2) = 1; else, ew(2) = 0; end;if (any(ew))M1 = adb(M1,ew);M2 = adb(M2,ew);end;% 梯度金字塔的建立G1 = conv2(conv2(es2(M1,2), w, 'valid'),w', 'valid');G2 = conv2(conv2(es2(M2,2), w, 'valid'),w', 'valid');Z1 = es2(M1+conv2(conv2(es2(M1, 1), v, 'valid'), v', 'valid'), 1); Z2 = es2(M2+conv2(conv2(es2(M2, 1), v, 'valid'), v', 'valid'), 1);B = zeros(size(M1));% 方向拉普拉斯金字塔的建立D1 = conv2(Z1, d1e, 'valid');D2 = conv2(Z2, d1e, 'valid');B = B + selg(D1, D2, ap);D1 = conv2(Z1, d2e, 'valid');D2 = conv2(Z2, d2e, 'valid');B = B + selg(D1, D2, ap);D1 = conv2(Z1, d3e, 'valid');D2 = conv2(Z2, d3e, 'valid');B = B + selg(D1, D2, ap);D1 = conv2(Z1, d4e, 'valid');D2 = conv2(Z2, d4e, 'valid');B = B + selg(D1, D2, ap);E(i1) = {-B/8};M1 = dec2(G1);M2 = dec2(G2);end;M1 = selh(M1,M2,mp);for i1 = zt:-1:1M1T = conv2(conv2(es2(undec2(M1), 2), 2*w, 'valid'), 2*w', 'valid'); M1 = M1T + E{i1};M1 = M1(1:zl(i1),1:sl(i1));end;Y = M1;end;% 图像2抽取函数function Y = dec2(X);[a b] = size(X);Y = X(1:2:a, 1:2:b);end;% 图像2插值函数function Y = undec2(X)[z s] = size(X);Y = zeros(2*z, 2*s);Y(1:2:2*z,1:2:2*s) = X;end;% 图像扩展函数function Y = adb(X, bd)[z s] = size(X);Y = zeros(z+bd(1),s+bd(2));Y(1:z,1:s) = X;if (bd(1) > 0)Y(z+1:z+bd(1),1:s) = X(z-1:-1:z-bd(1),1:s);end;if (bd(2) > 0)Y(1:z,s+1:s+bd(2)) = X(1:z,s-1:-1:s-bd(2));end;if (bd(1) > 0 & bd(2) > 0)Y(z+1:z+bd(1),s+1:s+bd(2)) = X(z-1:-1:z-bd(1),s-1:-1:s-bd(2));end;% 图像边缘像素处理函数function Y = es2(X, n)[z s] = size(X);Y = zeros(z+2*n, s+2*n);Y(n+1:n+z,n:-1:1)= X(:,2:1:n+1);Y(n+1:n+z,n+1:1:n+s)= X;Y(n+1:n+z,n+s+1:1:s+2*n)= X(:,s-1:-1:s-n);Y(n:-1:1,n+1:s+n)= X(2:1:n+1,:);Y(n+z+1:1:z+2*n,n+1:s+n)= X(z-1:-1:z-n,:);% 低频子带图像选择函数function Y = selh(M1, M2, mp)switch (mp)case 1, Y = M1;% 选择图像M1低频子带图像作为融合函数低频成分case 2, Y = M2;% 选择图像M2低频子带图像作为融合函数低频成分case 3, Y = (M1 + M2)/2;% 选择图像M1与M2加权平均低频子带图像作为融合函数低频成分otherwise, error('低频成分选择错误');end;% 高频子带图像选择函数function Y = selg(M1, M2, ap)% 判断输入图像是否大小一致[z1 s1] = size(M1);[z2 s2] = size(M2);if (z1 ~= z2) | (s1 ~= s2)error('输入图像大小不一致');end;switch(ap(1))case 1,% 绝对值最大融合准则mm = (abs(M1)) > (abs(M2));Y = (mm.*M1) + ((~mm).*M2);case 2,% 基于窗口系数加权平均融合准则um = ap(2); th = .75;% 设定阈值% 窗口区域加权平均能量S1 = conv2(es2(M1.*M1, floor(um/2)), ones(um), 'valid');S2 = conv2(es2(M2.*M2, floor(um/2)), ones(um), 'valid');% 归一化相关度MA = conv2(es2(M1.*M2, floor(um/2)), ones(um), 'valid');MA = 2 * MA ./ (S1 + S2 + eps);% s根据设定阈值选择融合系数m1 = MA > th; m2 = S1 > S2;w1 = (0.5 - 0.5*(1-MA) / (1-th));Y = (~m1) .* ((m2.*M1) + ((~m2).*M2));Y = Y + (m1 .* ((m2.*M1.*(1-w1))+((m2).*M2.*w1) + ((~m2).*M2.*(1-w1))+((~m2).*M1.*w1)));case 3,% 窗口系数绝对值选大融合准则um = ap(2);A1 = ordfilt2(abs(es2(M1, floor(um/2))), um*um, ones(um));A2 = ordfilt2(abs(es2(M2, floor(um/2))), um*um, ones(um));mm = (conv2((A1 > A2), ones(um), 'valid')) > floor(um*um/2);Y = (mm.*M1) + ((~mm).*M2);case 4,% 系数最大融合准则mm = M1 > M2;Y = (mm.*M1) + ((~mm).*M2);otherwise,error('高频成分选择错误');end;附录2 融合图像性能评价程序% 互信息函数function mui = mutinf(M1, M2, F)function mi = mutinf1(a, b)a=double(a);b=double(b);[Ma,Na] = size(a);[Mb,Nb] = size(b);M=min(Ma,Mb);N=min(Na,Nb);% 初始化直方图数组hab = zeros(256,256);ha = zeros(1,256);hb = zeros(1,256);% 归一化if max(max(a))~=min(min(a))a = (a-min(min(a)))/(max(max(a))-min(min(a)));elsea = zeros(M,N);endif max(max(b))-min(min(b))b = (b-min(min(b)))/(max(max(b))-min(min(b)));elseb = zeros(M,N);enda = double(int16(a*255))+1;b = double(int16(b*255))+1;% 统计直方图for i=1:Mfor j=1:Nindexx = a(i,j);indexy = b(i,j) ;hab(indexx,indexy) = hab(indexx,indexy)+1;% 联合直方图ha(indexx) = ha(indexx)+1;% M1直方图hb(indexy) = hb(indexy)+1;% M2直方图endend% 联合信息熵hsum = sum(sum(hab));index = find(hab~=0);p = hab/hsum;Hab = sum(sum(-p(index).*log(p(index))));% M1信息熵hsum = sum(sum(ha));index = find(ha~=0);p = ha/hsum;Ha = sum(sum(-p(index).*log(p(index))));% M2信息熵hsum = sum(sum(hb));index = find(hb~=0);p = hb/hsum;Hb = sum(sum(-p(index).*log(p(index))));% M1与M2互信息mi = Ha+Hb-Hab;% M1与M2归一化互信息mi1 = hab/(Ha+Hb);endmui=(mutinf1(M1, F)+mutinf1(M2, F));end% 均方差函数function img_var= variance(M1,M2,img)M1 = double(M1);M2 = double(M2);img = double(img);[r, c] = size(img);img_var = (sqrt(sum(sum((M1 - img).^2)) / (r * c ))+ sqrt(sum(sum((M2 - img).^2)) / (r * c )))/2;end% 峰值信噪比函数function psnr = psnr(M1,M2,img)M1 = double(M1);M2 = double(M2);img = double(img);[r, c] = size(img);psnr = 10.*(log((r * c )/sum(sum((M1 - img).^2)))+log((r * c )/sum(sum((M2 -img).^2))))/2;end% 平均梯度函数function avg_gra = avg_gradient(img)if nargin == 1 % 判断输入变量个数img = double(img);[r,c,b] = size(img);dx = 1;dy = 1;for k = 1 : bband = img(:,:,k);% 沿x与y方向差分[dzdx,dzdy] = gradient(band,dx,dy);s = sqrt((dzdx .^ 2 + dzdy .^2) ./ 2);g(k) = sum(sum(s)) / ((r - 1) * (c - 1));endavg_gra = mean(g);elseerror('Wrong number of input!');end% 边缘保持度函数function EDG_pr=edge_preservation(M1, M2, img)% 源图像与融合图像的梯度幅值与相角[GA,ALPHA_A,flag1]=SOBEL_EDGE(M1);[GB,ALPHA_B,flag2]=SOBEL_EDGE(M2);[GF,ALPHA_F,flag3]=SOBEL_EDGE(img);% 各像素边缘信息保留程度QAF=EDGE_PRE_VAL(GA,ALPHA_A,GF,ALPHA_F); QBF=EDGE_PRE_VAL(GB,ALPHA_B,GF,ALPHA_F); % 源图像与融合图像边缘保持度EDG_pr=NOR_WGT_VAL(QAF,GA,QBF,GB);endfunction [G,ALPHA,flag]=SOBEL_EDGE(img)% Sobel滤波梯度幅值与相角求取函数[row,col]=size(img);plate_H=[-1,-2,-1;0,0,0;-1,-2,-1];plate_V=[-1,0,-1;-2,0,-2;-1,0,-1];SX=conv2(img,plate_H,'same');SY=conv2(img,plate_V,'same');flag=0;G=zeros(row,col);ALPHA=zeros(row,col);for(i=1:row)for(j=1:col)if(SX(i,j)~=0)temp=SX(i,j)*SX(i,j)+SY(i,j)*SY(i,j);G(i,j)=sqrt(temp);ALPHA(i,j)=atan(SY(i,j)/SX(i,j));if(ALPHA(i,j)<0|G(i,j)==0)flag=flag+1;endendendendendfunction QAF=EDGE_PRE_VAL(GA,ALPHA_A,GF,ALPHA_F) % 边缘信息保留程度求取函数[row,col]=size(GA);GAF=zeros(row,col);AAF=zeros(row,col);%求取源图像与融合图像的相对幅值和相角for(i=1:row)for(j=1:col)if(GA(i,j)>GF(i,j))GAF(i,j)=GF(i,j)/GA(i,j);elseGAF(i,j)=GA(i,j)/GF(i,j);endendendALPHA_DIF=ALPHA_A-ALPHA_F;ALPHA_DIF=(abs(ALPHA_DIF)*2)/pi;AAF=1-ALPHA_DIF;% 可调节参数取值GAMA_G=0.9994;KG=-15;DELTA_G=0.5;GAMA_A=0.9879;KA=-22;DELTA_A=0.8;TEMP=exp(KG*(GAF-DELTA_G));QAF_G=GAMA_G./(1+TEMP);TEMP=exp(KA*(AAF-DELTA_A));QAF_ALPHA=GAMA_A./(1+TEMP);QAF=QAF_G.*QAF_ALPHA;size(QAF);sum(sum(QAF));endfunction NWP=NOR_WGT_VAL(QAF,GA,QBF,GB)% 边缘保持度求取函数NWP=0;temp1=(QAF.*GA+QBF.*GB);temp2=sum(sum(temp1));temp3=sum(sum(GA+GB));NWP=temp2/temp3;end11。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对于大小为w×i 的图像I,高斯金字塔Gj 由I 的几个分辨率减小的高斯图像Ii(i是下标,下同) 组成,其中,i={0,1,...,j} 代表金字塔的级数. 图像Ii 的大小为(w/2i)×(h/2i).[2i表示2的i次方] 图像Ii 是通过对图像Ii-1(i-1是下标) 进行隔行隔列采样而得到的图.
%高斯金字塔分成两步: 一对图像做高斯平滑, 二向下采样
%以演示开始.后面是处理过程
function memo()
imbase=imread('Guas.jpg');
imbase=rgb2gray(imbase);
imsmooth=Guassion(imbase);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'128.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'64.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'32.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'16.jpg');
imsmooth=Guassion(im1);
im1=DownSample(imsmooth);
im1=uint8(im1);
imwrite(im1,'8.jpg');
%一
%对高斯平滑分成两步: 一得到高斯平滑函数的矩阵
% 二对图像做平滑操作,对图像的边界的处理方法是对称
%权值之和为零
function r=GuassionMatrix(delta,radius)
radius=ceil(radius);
n=2*radius+1;
r=zeros(n,n);
%tempMatrix=zeros(radius,radius);
for i=-radius:radius
for j=-radius:radius
r(i+radius+1,j+radius+1)=exp(-(i^2+j^2)/2*delta^2);
end
end;
r=round(100*r);
r=r/sum(sum(r));
function r=Guassion(im)
radius=5;
delta=1;
GuassionSmooth=GuassionMatrix(delta,radius);
%怎样把循环优化了呢---------------------------------------
im=double(im);
[m,n,z]=size(im);
r=zeros(m,n,z);
for i=1:m
for j=1:n
for k=-radius:radius
for l=-radius:radius
x1=i+k+1;
if x1<1
x1=x1-2*k+1;
end
if x1>m
x1=x1-2*k-1;
end
x2=j+l+1;
if x2<1
x2=x2-2*l+1;
end
if x2>n
x2=x2-2*l-1;
end
r(i,j,:)=r(i,j,:)+im(x1,x2,:)*GuassionSmooth(k+radius+1,l+radius+1);
end
end
end
end
%----------------------------------------------
%向下采样
function r=DownSample(im)
[m,n,z]=size(im);
r=zeros(m/2,n/2,z);
for i=1:m/2
for j=1:n/2
r(i,j,:)=im(2*i,2*j,:);
end
end。

相关文档
最新文档