matlab将二值图像与原图重叠_图像处理matlab及图像融合图像镶嵌图像拼接

要把double的图像(范围是0到1)再次转化为256灰度值的,可以这样

Igrey= uint8(I2*255)

图像类型转换函数:

dither() 通过颜色抖动,把真彩图像转换成索引图像或灰度图象转换成二值图像

gray2ind() 将灰度图像(或二值图像)转换成索引图像

grayslice() 通过设定的阈值将灰度图象转换成索引图像

im2bw() 通过设定亮度阈值将灰度、真彩、索引图象转换成二值图像

ind2gray() 将索引图象转换成灰度图象

ind2rgb() 将索引图象转换成真彩色图像

mat2gray() 将一个数据矩阵转换成一幅灰度图象

rgb2gray() 将真彩转换成灰度图象

rgb2ind() 将真彩转换成索引图象

图像类型与类型间的转换

1。索引图像:包括一个数据矩阵X和一个色图阵MAP。矩阵元素值指向MAP中的特定颜色向量。

2。灰度图像:数据矩阵I,I中的数据代表了颜色灰度值。矩阵中的元素可以是double类型、8位或16位无符号的整数类型。

3。RGB图像:即真彩图像。矩阵中每个元素为一个数组,数组的元素定义了像素的红、绿、蓝颜色值。RGB数组可以是double类型、8位或16位无符号的整数类型。

4。二值图像:一个数据阵列,每个象素只能取0或1。

矩阵的基本运算

行列式求值:det(A)

矩阵加减:+、-

矩阵相乘:*

矩阵左除:A/B %相当于inv(A)*B

矩阵右除:A\B %相当于A*inv(B)

矩阵的幂:^

矩阵转置:'

矩阵求共轭(实部相同,虚部相反):conj(X)

矩阵求逆:inv(X)

级数的求和与收敛

symsum(fun,var,a,b):其中fun是通项表达式,var为求和变量,a为求和起点,b为求和终点

例如:I为1/[n*(2n+1)]从1到正无穷的和,求I

syms n;

f1=1/(n*(2*n+1));

I=symsum(f1,n,1,inf)

计算结果为:

I =2-2*log(2)

空间曲面

mesh()函数语法:

mesh(Z):

mesh(X,Y,Z,C):其中C是用来定义相应点颜色等属性的数组

例:求x^2+y^2=z的空间曲面

x=-4:4;

y=x;

[X,Y]=meshgrid(x,y);%生成x,y坐标

Z=X.^2+Y.^2;

mesh(X,Y,Z)

曲面图

[x,y]=meshgrid(xa,ya)

当xa,ya分别为m维和n维行向量,得到x和y均为n行m列矩阵。meshgrid常用于生成x-y平面上的网格数据;

mesh(x,y,z)绘制网面图,是最基本的曲面图形命令,其中x、y、z是同阶矩阵,表示曲面三维数据;

mesh(xa,ya,z)

xa,ya分别为m维和n维向量,z为n行m列矩阵。等价于先[x,y]=meshgrid(xa,ya)再mesh(x,y,z);

surf(x,y,z)绘制曲面图,与mesh用法类似;

contour(x,y,z)绘制等高线图,与mesh用法类似,可指定z的范围;

contour3(x,y,z)绘制三维等高线图,与mesh用法类似,可指定z的范围。

空间曲线

例:求方程组的空间曲线

1。化为参数方程组

x=t

y=sqrt[t(1-t)]

z=sqrt[1-x^2-y^2]

2。 程序

t=0:0.001:1;

x=t;

y=sqrt(t.*(1-t));

z=sqrt(1-x.^2-y.^2);

plot3(x,y,z,z,-y,z)

其中.*为数组相乘,.^为数组乘方

matlab实现离散余弦变换压缩(JPEG压缩原理)

JPEG图像压缩算法:

输入图像被分成8*8或16*16的小块,然后对每一小块进行二维DCT(离散余弦变换)变换,变换后的系数量化、编码并传输;

JPEG文件解码量化了的DCT系数,对每一块计算二维逆DCT变换,最后把结果块拼接成一个完整的图像。在DCT变换后舍弃那些不严重影响图像重构的接近0的系数。

DCT变换的特点是变换后图像大部分能量集中在左上角,因为左上放映原图像低频部分数据,右下反映原图像高频部分数据。而图像的能量通常集中在低频部分。

实例程序:

Jpeg

I=imread('D:\MATLAB7\toolbox\images\imdemos\cameraman.tif');

%该图片在安装matlab的目录中找,原图为灰度图象

I=im2double(I);%图像存储类型转换

T=dctmtx(8);%离散余弦变换矩阵

B=blkproc(I,[8 8],'P1*x*P2',T,T');

%对原图像进行DCT变换

mask=[1 1 1 1 0 0 0 0

1 1 1 0 0 0 0 0

1 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0];

B2=blkproc(B,[8 8],'P1.*x',mask);

%数据压缩,丢弃右下角高频数据

I2=blkproc(B2,[8 8],'P1*x*P2',T',T);

%进行DCT反变换,得到压缩后的图像

imshow(I)

title('原始图像')

figure;

imshow(I2)

title('压缩后的图像')

应用到的函数:

I=imread('图像文件名') :读取图像数据,保存在矩阵I中;

imshow(I) :显示灰度图像I,其他用法见matlab帮助;

I2=im2double(I1) :把图像数组I1转换成double精度类型;

D=dctmtx(n) :二维离散余弦变换函数,返回n*n离散余弦变换矩阵。

一个n*n的变换矩阵T被定义成:

Tpq=1/sqrt(n) ,当p=0,0<=q<=M-1;

Tpq=sqrt(2/n)*cos[pi*(2q+1)*p/2n] ,当1<=p<=M-1,0<=q<=M-1。

B=blkproc(A,[m n],fun,P1,P2...)

:块操作函数。对图像A的每个不同的m*n块应用fun函数,P1,P2等为fun函数参数。在图像边缘用0来扩展;只有当fun的返回矩阵是m*n矩阵时,B和A的大小才相同。

figure:强制生成一个新的个绘图窗口;

非线性方程求解

fsolve(fun,x0,options)

其中fun为待解方程或方程组的文件名;

x0位求解方程的初始向量或矩阵;

option为设置命令参数

建立文件fun.m:

y=fun(x)

y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ...

x(2) - 0.5*cos(x(1))+0.3*sin(x(2))];

>>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve'))

注:

...为续行符

m文件必须以为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。

不定积分与定积分

不定积分:int(fun,var)

例:求∫sinaxsinbxsincxdx

syms a b c x

y=sin(a*x)*sin(b*x)*sin(c*x);

int(y,x);

pretty(ans)

定积分:int(fun,var,a,b)

其中a,b分别为上下限

求解线形方程

solve,linsolve

例:A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1];

%矩阵的行之间用分号隔开,元素之间用逗号或空格

B=[3;1;1;0]

X=zeros(4,1);%建立一个4元列向量

X=linsolve(A,B)

diff(fun,var,n):对表达式fun中的变量var求n阶导数。

例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式

diff(F); %matlab区分大小写

pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式

求极限

limit:

例:limit(F,x,a,left);对表达式F求极限,变量为x,从左边趋近a。

inf:正无穷;-inf:负无穷。

matlab之基本绘图函数

figure:强制生成一个新的个绘图窗口;

syms x y t :声明变量;

fplot(函数表达式,绘图区间);

plot(横坐标向量,纵坐标向量,颜色/线形等参数)

ezplot(函数表达式):简单的fplot,easy fplot

axis([xmin xmax ymin ymax ...]):设置坐标轴显示范围

傅里叶基本知识:在图象处理的广泛应用领域中,傅立叶变换起着非常重要的作用,具体表现在包括图象分析、图象增强及图象压缩等方面。

假设f(x,y)是一个离散空间中的二维函数,则该函数的二维傅立叶变换的定义如下:

u=0,1…M-1 v=0,1…N-1 (1)

离散傅立叶反变换的定义如下:

x=0,1…M-1 y=0,1…N-1(3)

F(p,q)称为f(m,n)的离散傅立叶变换系数。这个式子表明,函数f(m,n)可以用无数个不同频率

的复指数信号和表示,而在频率(w1,w2)处的复指数信号的幅度和相位是F(w1,w2)。

例如,函数f(m,n)在一个矩形区域内函数值为1,而在其他区域为0.

假设f(m,n)为一个连续函数,则f(m,n)的傅立叶变换的幅度值(即)显示为网格图。

将傅立叶变换的结果进行可视化的另一种方法是用图象的方式显示变换结果的对数幅值。

MATLAB提供的快速傅立叶变换函数

(1)fft2

fft2函数用于计算二维快速傅立叶变换,其语法格式为:

B = fft2(I)

B = fft2(I)返回图象I的二维fft变换矩阵,输入图象I和输出图象B大小相同。

例如,计算图象的二维傅立叶变换,并显示其幅值的结果,其命令格式如下

load imdemos saturn2

imshow(saturn2)

B = fftshift(fft2(saturn2));

imshow(log(abs(B)),[],'notruesize')

(2)fftshift

MATLAB提供的fftshift函数用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心,其语法格式为:

B = fftshift(I)

对于矩阵I,B = fftshift(I)将I的一、三象限和二、四象限进行互换。

(2)ifft2

ifft2函数用于计算图象的二维傅立叶反变换,其语法格式为:

B = ifft2(I)

B = ifft2(A)返回图象I的二维傅立叶反变换矩阵,输入图象I和输出图象B大小相同。其语法格式含义与

fft2函数的语法格式相同,可以参考fft2函数的说明。

简单低通滤波器的设计 一个图象经过傅立叶变换后,就从空域变到了频域,因此我们可以用信号处理中对于频域信号的处理

方法对一幅图象进行处理。比如对图象进行低通滤波等。

虽然在计算机中必定能够模拟一个锐截止频率的理想低通滤波器,但它们不能用电子元件来实现。实

际中比较常用的低通滤波器有:巴特沃思(Butterworth)滤波器、指数滤波器(ELPF)、梯形低通滤波

器等。

在实验中我们设计一个理想的低通滤波器。

设计理想的低通滤波器由其定义可知只要设计一个与频域图象大小完全相同的矩阵。在某一个域值内

该矩阵的值为1,其余为0即可。

例:若图象的大小为128*128,则可以这样设计一个低通滤波器:

H=zeros(128);

H(32:96,32:96)=1; %此处的范围是人为取定的,可以根据需要更改。

若图象矩阵I的傅立叶变换是B(已经用fftshift将频谱中心移至矩阵的中心),则对这幅图象做低通滤

波,再做傅立叶逆变换命令为

LOWPASS=B.*H;  %此处设变换后的矩阵为LOWPASS,另注意这儿是矩阵的点乘。

C=ifft2(LOWPASS);

Imshow(abs(C))

引言 图像镶嵌技术(mosai

)是图像融合技术的一种,一般指的是同种类型图像的融合。他把多幅具有重叠信息部分的图像衔接在一起,得到一幅完整的、范围更大的图像,并且去除其中的冗余信息。图像镶嵌技术的应用非常广泛。例如,虚拟现实中的全景图显示及遥感图像的处理等领域,都有广泛的应用。图像镶嵌的评价标准是镶嵌后得到的图像,不但具有良好的视觉效果,而且还要尽可能地保持图像光谱特征。通俗地说,就是镶嵌的图像越“无缝”,效果就越好。当然,这里的“无缝”,不是绝对意义上的,而是人眼分辨力以内的“无缝”。

一般情况下,进行图像拼接时,在拼接的边界上,不可避免地会产生拼接缝。这是因为两幅待拼接图像在灰度上的细微差别都会导致明显的拼接缝。而在实际的成像过程中,这种细微差别很难避免。因此图像镶嵌技术的难点就在于准确寻找图像之间的位置关系,并把两幅以上的图像平滑地衔接在一起,获取一幅全局的图像。本文的基本思想就是突破以往在寻找拼接线时,只要找到一个最佳拼接点,以此点做一条直线作为拼接线的不合理性,而是取一个闭值,在闭值范围内寻找出每个拼接点,把这些点连成的折线作为拼接线,进行拼接。

2 拼接缝消除的方法

传统的拼接缝消除的方法有很多,其中用得较多的方法有;中值滤波法、利用小波变换的方法、加权平均法等

2 . 1 中值滤波法消除拼接缝

中值滤波法是对接缝附近的区域进行中值滤波。对与周围灰度值差比较大的象素取与周围象素接近的值,从而消除光强的不连续性。中值滤波器处理接缝附近的狭长地带。该方法速度快,但质量一般。平滑的结果会使图像的分辨率下降,使图像细节分辨不出,产生图像模糊。

2 . 2 利用小波变换的方法消除拼接缝

小波变换方法也是目前比较常用的一种方法,他充分利用小波变换的多分辨率特性,很好地解决了拼接图像的接缝问题。其原理为:由于小波变换具有带通滤波器的性质,在不同尺度下的小波变换分量,实际上占有一定的频宽,尺度j

越大,该分量的频率越高,因此每一个小波分量所具有的频宽不大,把要拼接的两幅图像先按小波分解的方法将他们分解成不同频率的小波分量,只要分解得足够细,小波分量的频宽就能足够小。然后在不同尺度下,选取不同的拼接宽度,把2

个图像按不同尺度下的小波分量先拼接下来,然后再用恢复程序,恢复到整个图像。这样得到的图像可以很好地兼顾清晰度和光滑度2

个方面的要求。但是,小波变换也存在缺点,如小波变换的算法比较复杂,需要在小波变换域内先进行拼接处理,在计算过程中涉及到大量的浮点运算和边界处理问题,对实际生产中的大容量图像进行处理时计算机内存开销很大,且处理时间较长,拼接速度慢。

2 . 3 利用加权平滑的方法消除拼接缝

在实际中,使用较多的方法还有对重叠区域进行加权平滑的方法。这种方法的思路是:图像重叠区域中象素点的灰度值Pixel

由两幅图像中对应点的灰度值LPixel 和RPixel 加权平均得到,即:

P ixel 一k X LPixel + ( l 一k ) X RPixel 其中:k 是渐变因子,满足条件:o

< k < 1 ,在重叠区域中,按照从左图像到右图像的方向,k 由1

渐变至0 ,由此实现了在重叠区域中由左边重叠区慢慢过渡到右边重叠区的平滑拼接。

寻找最佳拼接线时,采用一个滑动窗口在图像重叠区上逐行选择灰度值差异最小的象元作为最佳拼接点。但是,如果按照这种拼接点选择法,会出现一个新问题,就是往往会出现上下行拼接点位置相差较远的现象,这样拼接后有时因上下行之间灰度差异较大而造成新的接缝。为避免这类现象发生,不仅要考虑相邻拼接点的灰度值差异,而且还要考虑相邻拼接点的位置不能太远。这样就引进了一个阑值T

,把选择最佳拼接点的范围限制在这个阑值内。除第一行按灰度值差异最小的原则处理外,其他各行的拼接点从一个选定区域中选取:即与上一行所选拼接点同列的点及以该点为中心左右宽度为T

的区域中的点。在这个区域中选取一个最佳拼接点。选出每行的拼接点后连接成一条拼接线,可想而知,这条拼接线可能是条折线。这样,由于各行都是选择规定邻域内灰度差异最小的点作为拼接点,接缝现象就会得到很大的改观。同时,T

的值又不能选取得太大,应在1 一5

之间选取为佳。找出最佳拼接缝后,按前面所述的加权平滑对重叠区域再进行过渡,得到的图像质量有很大改观。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型

前言 虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC)&#xff0c;但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外&#xff0c;了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。 简介 本文将介绍值类型与引用类…

mysql udf sm4_SM4国密算法Java版

根据 国密SM4 文档 编写的一个Java 加密解密样例package javasm4;/**** author Jeen*/public class JavaSM4 {public static int[] key new int[4];//密钥public static int[] temp new int[4];//中间量 存储运算结果public static int[] rkey new int[32];//轮密钥public s…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(一)

一、垃圾收集平台基本原理解析 在C#中程序访问一个资源需要以下步骤&#xff1a; 调用中间语言&#xff08;IL&#xff09;中的newobj指令&#xff0c;为表示某个特定资源的类型实例分配一定的内存空间。初始化上一步所得的内存&#xff0c;设置资源的初始状态&#xff0c;从而…

gperftools mysql_利用 gperftools 对nginx mysql 内存管理 性能优化

利用 gperftools 对nginx 与 mysql 进行 内存管理 性能优化 降低负载.Gperftools 是由谷歌开发。官方对gperftools 的介绍为&#xff1a;These tools are for use by developers so that they can create more robust applications. Especially of use to those developing m…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(二)

前几天学习了CLR垃圾收集原理和基本算法&#xff0c;但是那些是仅仅相对于托管堆而言的&#xff0c;任何非托管资源的类型&#xff0c;例如文件、网络资源等&#xff0c;都必须支持一种称为终止化&#xff08;finalization&#xff09;的操作。 终止化 终止化操作允许一种资源…

python time 时间戳_Python的time.time()返回本地或UTC时间戳吗?

这是可以在文本文件中使用的时间戳记的文本形式。(问题的标题在过去是不同的&#xff0c;因此对此答案的介绍进行了更改&#xff0c;以阐明如何将其解释为时间。[2016年1月14日更新])您可以使用.now()或.utcnow()来将时间戳记作为字符串获取datetime.datetime&#xff1a;>&…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(三)

接上一篇.net框架读书笔记---CLR内存管理\垃圾收集&#xff08;二&#xff09;&#xff0c;主要学习了终止化对象&#xff08;实现了Finalize方法的对象&#xff09;&#xff0c;了解了终止化对象的弊端&#xff0c;学习了通过实现IDisposable接口&#xff0c;通过Dispose方法来…

mysql实验三单表和多表查询_数据库实验三(单表查询)

实验三:select sno,snamefrom student;//(1)查询全体学生的学号和姓名select *from student;//(2)查询全体学生的详细记录select sname,sage,sdeptfrom student where sdeptMA;//(3)查询软件学院的学生姓名、年龄、系别select distinct snofrom sc;//(4)查询所有选修过课程的学…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(四)

弱引用 当一个根指向一个对象时&#xff0c;该对象不可能被垃圾收集器收集&#xff0c;在这种情况下&#xff0c;通常说存在一个该对象的强引用&#xff08;strong reference&#xff09;。垃圾收集器还支持弱引用&#xff08;weak reference&#xff09;的概念。弱引用允许垃圾…

1756冗余_AB冗余模块1756-RM

AB冗余模块1756-RM100-C30UKJ01100-C30UKJ10100-C30UKL00100-C30UKL10AB冗余模块1756-RM100-C30UKP00100-C30UL00AB冗余模块1756-RM100-C30UL10100-C30UN00AB冗余模块1756-RM100-C30UN10100-C30UP001756-RM ControLogix冗余模块140U-H-RM12B 140U塑壳断路器外部附件1756-RMC1 C…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(五)

对象复苏 当一个终止化对象被认为死亡时&#xff0c;垃圾收集器可以强制使该对象获得重生&#xff08;进入终止化可达队列&#xff09;&#xff0c;因为这样才能调用对象的Finalize方法。在Finalize方法被调用之后&#xff0c;它才算真正的死亡了&#xff0c;一个终止化对象会经…

imp命令导入指定表_Oracle—— 导入/导出 数据:exp,imp 命令

exp&#xff0c;imp 命令是需要在windows 的 cmd 命令中执行的命令&#xff0c;主要用于数据的导入和导出工作&#xff0c;方便高效。远程地址—— ip&#xff1a;port/orcl 注&#xff1a;该远程地址不写&#xff0c;就意味着执行本地的库。Oracle的数据导出(1)导出数据的…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(六)

对象代龄 代龄是旨在提高垃圾收集器性能的一种机制。有以下几点&#xff1a; 对象越新&#xff0c;其生存期越短&#xff1b;对象越老&#xff0c;其生存期越长&#xff1b;对托管堆的一部分执行垃圾收集要比对整个托管堆执行垃圾收集速度要快。在托管堆初始化时&#xff0c;其…

MySQL数据库开发理念_mysql之数据库基本理念

数据储存的问题&#xff1a;数据冗余和不一致数据访问困哪数据孤立完整性原子性问题例如AB2个账户&#xff0c;从A中向B转钱&#xff0c;不管如何转&#xff0c;A和B的总量是保持不变的。只要A减少&#xff0c;B就增加。并发访问异常安全性问题文件的分层&#xff1a;表示层&am…

【转】.net框架读书笔记---CLR内存管理\垃圾收集(七)

编程控制垃圾收集器 System.GC类型为应用程序提供了直接控制垃圾收集器的一些方法&#xff0c;可以通过GC.MaxGeneration来查询托管堆支持的最大代龄&#xff0c;目前为2。 通过下面方法执行垃圾收集器 GC.Collect(int);传递代龄&#xff0c;传递0&#xff0c;收集0代&#xff…

少年自学python笔记_自学python 笔记

print() 输入input() 输出python能够处理的数据类型:整数、浮点数、字符串("\"转义符,\n 换行)、布尔值/布尔代数(True、False(and【或】、or【于】、not【非】))(and&#xff1a;只有所有都为True&#xff0c;and运算结果才为True)(or:只要一个为True&#xff0c;or…

【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1

前言 虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC)&#xff0c;但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外&#xff0c;了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。 简介 这篇文章我们将介绍一些方…

java解析string_java读取文件内容为string字符串的方法

直接就把项目中的方法贴出来吧/*** 读出城市列表文件*/private String readCityFile() {File file02 new File(path_xinfu, "/cityList.json");FileInputStream is null;StringBuilder stringBuilder null;try {if (file02.length() ! 0) {/*** 文件有内容才去读文…

【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2

前言 虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC)&#xff0c;但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外&#xff0c;了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。 简介 继续上篇未完成的“参数传…

java 引用被回收_java GC 静态List 如果没有引用会被回收吗

垃圾收算法1.引用计数法(Reference Counting Collector)2.tracing算法(Tracing Collector)3.compacting算法(Compacting Collector)4.copying算法(Coping Collector)5。generation算法(Generational Collector)6.adaptive算法(Adaptive Collector)一个新的对象被创建&#xff0…