matlab plot函数中的imagesc函数功能,怎么在origin实现?

请问如何用matlab画出下面这个图的图像 - 信息科学 - 小木虫 - 学术 科研 第一站
&& 查看话题
请问如何用matlab画出下面这个图的图像
RTRT啊,谢谢
surf()函数可以。举个例子
figure,surf(double(I(1:10:60,1:10:60))),zlim(); 应该有函数吧 : Originally posted by kaizen123 at
应该有函数吧 应该是图像匹配中相关系数矩阵的图像 mesh surf,都可以的 : Originally posted by 梦在潇湘 at
mesh surf,都可以的 这个我知道,是那个箭头和注释 mesh,surf都可以的,当前图显示的应该是相关幅值谱。
var cpro_id = 'u1216994';
欢迎监督和反馈:本帖内容由
提供,小木虫为个人免费站点,仅提供交流平台,不对该内容负责。欢迎协助我们监督管理,共同维护互联网健康,如果您对该内容有异议,请立即发邮件到
联系通知管理员,也可以通过QQ周知,我们的QQ号为:8835100
我们保证在1个工作日内给予处理和答复,谢谢您的监督。
小木虫,学术科研第一站,为中国学术科研研究提供免费动力
欢迎监督,发现不妥请立即
E-mail: & QQ:8835100请教个matlab中的rand函数 - 仿真模拟 - 小木虫 - 学术 科研 第一站
&& 查看话题
请教个matlab中的rand函数
我想产生N个数,每个数取值0或者1,每个数取值1的概率为0.3,
用rand或者其他matlab命令该怎么表达?
另外,我想产生类似的N个数,1的出现概率为0.5,用 rand(1,n)>0.5,可以不可以?
>> N=zeros(1,100);
for i=1:100
& & s=rand(1,1);
& & if s<=0.3
& && &&&N(i)=1;
& && &&&n=n+1;
& && &&&N(i)=0;
& & 30 Originally posted by dbb627 at
&& N=zeros(1,100);
for i=1:100
& & s=rand(1,1);
& & if s&=0.3
& && &&&N(i)=1;
& && &&&n=n+1;
& && &&&N(i)=0;
& & 30 干脆写出这样行不行:
rand(1,n)<0.3 randerr(1,N,round(N/2))
var cpro_id = 'u1216994';
欢迎监督和反馈:本帖内容由
提供,小木虫为个人免费站点,仅提供交流平台,不对该内容负责。欢迎协助我们监督管理,共同维护互联网健康,如果您对该内容有异议,请立即发邮件到
联系通知管理员,也可以通过QQ周知,我们的QQ号为:8835100
我们保证在1个工作日内给予处理和答复,谢谢您的监督。
小木虫,学术科研第一站,为中国学术科研研究提供免费动力
欢迎监督,发现不妥请立即
E-mail: & QQ:8835100用matlab求函数最大值怎么求图像函数? - 叫阿莫西中心 - 中国网络使得骄傲马戏中心!
用matlab求函数最大值怎么求图像函数?
Matlab中图像函数大全
Matlab中图像函数大全
22:40Matlab常用图像操作
一. 读写图像文件
imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif')
注:计算机E盘上要有w01相应的.tif文件。
2. imwrite
imwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',&tif&)
3. imfinfo
imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif')
二. 图像的显示
image函数是MATLAB提供的最原始的图像显示函数(主要彩色显示图象),如:
a=[1,2,3,4;4,5,6,7;8,9,10,11,12];
imshow函数用于灰度图像文件的显示,如:
i=imread('e:\w01.tif');
imshow(i);
3. colorbar
colorbar函数用显示图像的颜色条。
通常,颜色映象进行过调节,把数据从最小扩展到最大,也就是说整个颜色映象都用于绘图。有时也许想改变颜色使用的方法。函数caxis代表颜色轴,因为颜色增加了另一个维数,它允许对数据范围的一个子集使用整个颜色映象或者对数据的整个集合只使用当前颜色映象的一部分。
[cmin,cmax]=caxis返回映射到颜色映象中第一和最后输入项的最小和最大的数据。它们通常被设成数据的最小值和最大值。比如,函数mesh(peaks)
会画出函数peaks的网格图,并把颜色轴caxis设为[-6.2],即Z的最小值和最大值。这些值之间的数据点,使用从颜色映象中经插值得到的颜色。如:
i=imread('e:\w01.tif');
imshow(i);
figure函数用于设定图像显示窗口,如:figure(1);
/figure(2);
5.imagesc(a);&& caxis([-3 8]) ;
标尺标度从-3,到8 显示标度尺。
三. 图像的变换
fft2函数用于数字图像的二维傅立叶变换,如:
i=imread('e:\w01.tif');
j=fft2(i);
ifft2函数用于数字图像的二维傅立叶反变换,如:
i=imread('e:\w01.tif');
j=fft2(i);
k=ifft2(j);
3. 利用fft2计算二维卷积
利用fft2函数可以计算二维卷积,如:
a=[8,1,6;3,5,7;4,9,2];
b=[1,1,1;1,1,1;1,1,1];
c=ifft2(fft2(a).*fft2(b));
c=c(1:5,1:5);
利用conv2(二维卷积函数)校验, 如:
a=[8,1,6;3,5,7;4,9,2];
b=[1,1,1;1,1,1;1,1,1];
c=conv2(a,b);
四. 模拟噪声生成函数和预定义滤波器
1. imnoise
imnoise函数用于对图像生成模拟噪声,如:
i=imread('e:\w01.tif');
j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声
2. fspecial
fspecial函数用于产生预定义滤波器,如:
h=fspecial('sobel');%sobel水平边缘增强滤波器
h=fspecial('gaussian');%高斯低通滤波器
h=fspecial('laplacian');%拉普拉斯滤波器
h=fspecial('log');%高斯拉普拉斯(LoG)滤波器
h=fspecial('average');%均值滤波器
五. 图像的增强
imhist函数用于数字图像的直方图显示,如:
i=imread('e:\w01.tif');
imhist(i);
2. 直方图均化
histeq函数用于数字图像的直方图均化,如:
i=imread('e:\w01.tif');
j=histeq(i);
3. 对比度调整
imadjust函数用于数字图像的对比度调整,如:
i=imread('e:\w01.tif');
j=imadjust(i,[0.3,0.7],[]);
4. 对数变换
log函数用于数字图像的对数变换,如:
i=imread('e:\w01.tif');
j=double(i);
5. 基于卷积的图像滤波函数
filter2函数用于图像滤波,如:
i=imread('e:\w01.tif');
h=[1,2,1;0,0,0;-1,-2,-1];
j=filter2(h,i);
6. 线性滤波
利用二维卷积conv2滤波, 如:
i=imread('e:\w01.tif');
h=[1,1,1;1,1,1;1,1,1];
j=conv2(i,h);
7. 中值滤波
medfilt2函数用于图像的中值滤波,如:
i=imread('e:\w01.tif');
j=medfilt2(i);
(1)利用Sobel算子锐化图像, 如:
i=imread('e:\w01.tif');
h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子
j=filter2(h,i);
(2)利用拉氏算子锐化图像, 如:
i=imread('e:\w01.tif');
j=double(i);
h=[0,1,0;1,-4,0;0,1,0];%拉氏算子
k=conv2(j,h,'same');
二维傅立叶变换和二维傅立叶反变换:
i=imread('e:\w01.tif');
figure(1);
imshow(i);
j=fft2(i);
k=fftshift(j);
figure(2);
l=log(abs(k));
imshow(l,[]);
n=ifft2(j)/255;
figure(3);
imshow(n);
图像的变换
1. 离散傅立叶变换的 Matlab 实现
Matlab 函数 fft、fft2 和 fftn
分别可以实现一维、二维和 N 维 DFT 算法;而函数
ifft、ifft2 和 ifftn 则用来计算反 DFT
。这些函数的调用格式如下:
A=fft(X,N,DIM)
其中,X 表示输入图像;N 表示采样间隔点,如果 X
小于该数值,那么 Matlab 将会对 X
进行零填充,否则将进行截取,使之长度为 N ;DIM
表示要进行离散傅立叶变换。
A=fft2(X,MROWS,NCOLS)
其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X
A=fftn(X,SIZE)
其中,SIZE 是一个向量,它们每一个元素都将指定 X
相应维进行零填充后的长度。
函数 ifft、ifft2 和
ifftn的调用格式于对应的离散傅立叶变换函数一致。
例子:图像的二维傅立叶频谱
% 读入原始图像
I=imread('lena.bmp');
% 求离散傅立叶频谱
J=fftshift(fft2(I));
imshow(log(abs(J)),[8,10])
2. 离散余弦变换的 Matlab 实现
2.1. dct2 函数
功能:二维 DCT 变换
格式:B=dct2(A)
B=dct2(A,m,n)
B=dct2(A,[m,n])
说明:B=dct2(A) 计算 A 的 DCT 变换 B ,A 与 B
的大小相同;B=dct2(A,m,n) 和 B=dct2(A,[m,n]) 通过对 A
补 0 或剪裁,使 B 的大小为 m&n。
2.2. dict2 函数
功能:DCT 反变换
格式:B=idct2(A)
B=idct2(A,m,n)
B=idct2(A,[m,n])
说明:B=idct2(A) 计算 A 的 DCT 反变换 B ,A 与 B
的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通过对 A
补 0 或剪裁,使 B 的大小为 m&n。
2.3. dctmtx函数
功能:计算 DCT 变换矩阵
格式:D=dctmtx(n)
说明:D=dctmtx(n) 返回一个 n&n 的 DCT
变换矩阵,输出矩阵 D 为 double 类型。
3. 图像小波变换的 Matlab 实现
3.1 一维小波变换的 Matlab 实现
(1) dwt 函数
功能:一维离散小波变换
格式:[cA,cD]=dwt(X,'wname')
[cA,cD]=dwt(X,Lo_D,Hi_D)
说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数
'wname' 对信号 X 进行分解,cA、cD
分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D)
使用指定的滤波器组 Lo_D、Hi_D
对信号进行分解。
(2) idwt 函数
功能:一维离散小波反变换
格式:X=idwt(cA,cD,'wname')
X=idwt(cA,cD,Lo_R,Hi_R)
X=idwt(cA,cD,'wname',L)
X=idwt(cA,cD,Lo_R,Hi_R,L)
说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量
cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数
X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R
经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L)
指定返回信号 X 中心附近的 L 个点。
3.2 二维小波变换的 Matlab 实现
二维小波变换的函数
-------------------------------------------------
函数名&&&&&&&&&&&&&&&
---------------------------------------------------
dwt2&&&&&&&&&&&
二维离散小波变换
wavedec2&&&&&&
二维信号的多层小波分解
idwt2&&&&&&&&&&
二维离散小波反变换
waverec2&&&&&&&
二维信号的多层小波重构
wrcoef2&&&&&&&&&
由多层小波分解重构某一层的分解信号
upcoef2&&&&&&&&&
由多层小波分解重构近似分量或细节分量
detcoef2&&&&&&&&
提取二维信号小波分解的细节分量
appcoef2&&&&&&&
提取二维信号小波分解的近似分量
upwlev2&&&&&&&&
二维小波分解的单层重构
dwtpet2&&&&&&&&
二维周期小波变换
idwtper2&&&&&&&
二维周期小波反变换
-------------------------------------------------------------
(1) wcodemat 函数
功能:对数据矩阵进行伪彩色编码
格式:Y=wcodemat(X,NB,OPT,ABSOL)
Y=wcodemat(X,NB,OPT)
Y=wcodemat(X,NB)
Y=wcodemat(X)
说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X
的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为
0~NB,缺省值 NB=16;
OPT 指定了编码的方式(缺省值为 'mat'),即:
&&&&&&&&&&&&&&&&
OPT='row' ,按行编码
&&&&&&&&&&&&&&&&
OPT='col' ,按列编码
&&&&&&&&&&&&&&&&
OPT='mat' ,按整个矩阵编码
ABSOL 是函数的控制参数(缺省值为 '1'),即:
&&&&&&&&&&&&&&&&
ABSOL=0 时,返回编码矩阵
&&&&&&&&&&&&&&&&
ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)
(2) dwt2 函数
功能:二维离散小波变换
格式:[cA,cH,cV,cD]=dwt2(X,'wname')
[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数
'wname' 对二维信号 X
进行二维离散小波变幻;cA,cH,cV,cD
分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D
分解信号 X 。
(3) wavedec2 函数
功能:二维信号的多层小波分解
格式:[C,S]=wavedec2(X,N,'wname')
[C,S]=wavedec2(X,N,Lo_D,Hi_D)
说明:[C,S]=wavedec2(X,N,'wname') 使用小波基函数 'wname'
对二维信号 X 进行 N
层分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D)
使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D
分解信号 X 。
(4) idwt2 函数
功能:二维离散小波反变换
格式:X=idwt2(cA,cH,cV,cD,'wname')
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
X=idwt2(cA,cH,cV,cD,'wname',S)
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
说明:X=idwt2(cA,cH,cV,cD,'wname')
由信号小波分解的近似信号 cA 和细节信号
cH、cH、cV、cD 经小波反变换重构原信号 X
;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R
重构原信号 X ;X=idwt2(cA,cH,cV,cD,'wname',S) 和
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S
个数据点。
(5) waverec2 函数
说明:二维信号的多层小波重构
格式:X=waverec2(C,S,'wname')
X=waverec2(C,S,Lo_R,Hi_R)
说明:X=waverec2(C,S,'wname')
由多层二维小波分解的结果 C、S 重构原始信号 X
,'wname' 为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R)
使用重构低通和高通滤波器 Lo_R 和 Hi_R
重构原信号。
图像处理工具箱
1. 图像和图像数据
缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点
数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩
阵中每个数据占用1个字节。
在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8
与double两种类型数据的值域不同,编程需注意值域转换。&&&&&&&&&
从uint8到double的转换
---------------------------------------------
图像类型&&&&&&&
MATLAB语句
---------------------------------------------
索引色&&&&&&&&&&&&
B=double(A)+1
索引色或真彩色 B=double(A)/255
二值图像&&&&&&&&&
B=double(A)
---------------------------------------------
从double到uint8的转换
---------------------------------------------
图像类型&&&&&&&
MATLAB语句
---------------------------------------------
索引色&&&&&&&&&&&&&&
B=uint8(round(A-1))
索引色或真彩色&&&
B=uint8(round(A*255))
二值图像&&&&&&&&&&&
B=logical(uint8(round(A)))
---------------------------------------------
2. 图像处理工具箱所支持的图像类型
2.1 真彩色图像
R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50)处的像素值,
可查看三元数据(100,50,1:3)。
真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无
符号整型存储,亮度值范围[0,255]
2.2 索引色图像
包含两个结构,一个是调色板,另一个是图像数据矩阵。调色板是一个有3列和若干行
的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。
注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。&&&&&&&&&
常用颜色的RGB值
--------------------------------------------
--------------------------------------------
天蓝 0.67 0&& 1
橘黄&&& 1 0.5
深红&& 0.5
灰&&& 0.5 0.5
--------------------------------------------&&&&&&&&
产生标准调色板的函数
-------------------------------------------------
函数名&&&&&&
-------------------------------------------------
色彩饱和度,以红色开始,并以红色结束
黑色-红色-黄色-白色
青蓝和洋红的色度
粉红的色度
带蓝色的灰度
Jet&&&&&&&
Hsv的一种变形,以蓝色开始,以蓝色结束
线型铜色度
Prim&&&&&&
三棱镜,交替为红、橘黄、黄、绿和天蓝
Flag&&&&&&
交替为红、白、蓝和黑
--------------------------------------------------
缺省情况下,调用上述函数灰产生一个64&3的调色板,用户也可指定调色板大小。
索引色图像数据也有double和uint8两种类型。
当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行&&
如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行&&2.3
存储灰度图像只需要一个数据矩阵。
数据类型可以是double,[0,1];也可以是uint8,[0,255]2.4
二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。
MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。2.5
MATLAB工具箱支持将多帧图像连接成图像序列。
图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度之后构成第4维。
分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若是索引色图像,
调色板也必须相同。
可参考cat()函数&&&
A=cat(4,A1,A2,A3,A4,A5)
MATLAB图像类型转换&&&&&&&&
图像类型转换函数
---------------------------------------------------------------------------
函数名&&&&&&&&&&&&&&&&&&&&&
---------------------------------------------------------------------------
dither&&&&&&
图像抖动,将灰度图变成二值图,或将真彩色图像抖动成索引色图像
gray2ind&&&
将灰度图像转换成索引图像
grayslice&&&
通过设定阈值将灰度图像转换成索引色图像
im2bw&&&&&
通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图
ind2gray&&&
将索引色图像转换成灰度图像
ind2rgb&&&&&
将索引色图像转换成真彩色图像
mat2gray&&
将一个数据矩阵转换成一副灰度图
rgb2gray&&&
将一副真彩色图像转换成灰度图像
rgb2ind&&&&&
将真彩色图像转换成索引色图像
----------------------------------------------------------------------------
4. 图像文件的读写和查询
4.1 图形图像文件的读取
利用函数imread()可完成图形图像文件的读取,语法:
A=imread(filename,fmt)
[X,map]=imread(filename,fmt)
[...]=imread(filename)
[...]=imread(filename,idx) (只对TIF格式的文件)
[...]=imread(filename,ref) (只对HDF格式的文件)
通常,读取的大多数图像均为8bit,当这些图像加载到内存中时,Matlab就将其存放
在类uint8中。此为Matlab还支持16bit的PNG和TIF图像,当读取这类文件时,Matlab就将
其存贮在uint16中。
注意:对于索引图像,即使图像阵列的本身为类uint8或类uint16,imread函数仍将
颜色映象表读取并存贮到一个双精度的浮点类型的阵列中。
4.2 图形图像文件的写入
使用imwrite函数,语法如下:
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
&& imwrite(...,filename)
imwrite(...,parameter,value)
当利用imwrite函数保存图像时,Matlab缺省的方式是将其简化道uint8的数据格式。
图形图像文件信息的查询&&
imfinfo()函数
5. 图像文件的显示
5.1 索引图像及其显示
&& 方法一:
colormap(map)
&& 方法二:
imshow(X,map)
5.2 灰度图像及其显示
&& Matlab 7.0
中,要显示一副灰度图像,可以调用函数 imshow 或
imagesc (即
imagescale,图像缩放函数)
&& (1) imshow
函数显示灰度图像
imshow(I)&&& 或
使用明确指定的灰度级书目:imshow(I,32)
由于Matlab自动对灰度图像进行标度以适合调色板的范围,因而可以使用自定义
大小的调色板。其调用格式如下:
&&&&&&&&&&
imshow(I,[low,high])
&&& 其中,low
和 high 分别为数据数组的最小值和最大值。
&& (2) imagesc
函数显示灰度图像
下面的代码是具有两个输入参数的 imagesc
函数显示一副灰度图像
imagesc(1,[0,1]);
colormap(gray);
&&& imagesc
函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),
对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表
中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。
&&& 在调用
函数时,若只使用一个参数,可以用任意灰度范围显示图像。在该
调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大
值对应于颜色映象表中的最后一个颜色值。
5.3 RGB 图像及其显示
&& (1) image(RGB)
不管RGB图像的类型是double浮点型,还是 uint8 或
uint16 无符号整数型,Matlab都
能通过 image 函数将其正确显示出来。
uint8(round(RGB64&255)); % 将 double 浮点型转换为 uint8
无符号整型
&& RGB64 =
double(RGB8)/255;&&&&&&&&&&&
% 将 uint8 无符号整型转换为 double 浮点型
&& RGB16 =
uint16(round(RGB64&65535)); % 将 double 浮点型转换为
uint16 无符号整型
&& RGB64 =
double(RGB16)/65535;&&&&&
% 将 uint16 无符号整型转换为 double 浮点型
&& (2) imshow(RGB)
参数是一个 m&n&3 的数组
5.4 二进制图像及其显示
&& (1) imshow(BW)
&& 在 Matlab 7.0
中,二进制图像是一个逻辑类,仅包括 0 和 1
两个数值。像素 0 显示
为黑色,像素 1 显示为白色。
显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值
0 显示为白色;1 显示
&& 例如: imshow(~BW)
此外,还可以使用一个调色板显示一副二进制图像。如果图形是
uint8 数据类型,
则数值 0 显示为调色板的第一个颜色,数值 1
显示为第二个颜色。
&& 例如: imshow(BW,[1 0 0;0 0
5.5 直接从磁盘显示图像
可使用一下命令直接进行图像文件的显示:
imshow filename
&& 其中,filename
为要显示的图像文件的文件名。
如果图像是多帧的,那么 imshow
将仅显示第一帧。但需注意,在使用这种方式时,图像
数据没有保存在Matlab 7.0
工作平台。如果希望将图像装入工作台中,需使用
getimage 函
数,从当前的句柄图形图像对象中获取图像数据,
&& 命令形式为: rgb =
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用MATLAB求一幅图像的自相关函数_matlab吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:56,208贴子:
用MATLAB求一幅图像的自相关函数收藏
我想用MATLAB计算一幅散斑图像的自相关函数,并用曲线表示出来,不知道怎么做,求助,谢谢
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或怎样才算成为图像处理的高级研发人员,如题是熟练使用matlab,还是编写图像处理算法,或者函数,_百度知道
怎样才算成为图像处理的高级研发人员,如题是熟练使用matlab,还是编写图像处理算法,或者函数,
人有些不懂,正如拿破仑所说的,不想当将军的士兵不是好士兵,虽然才刚入门,但我是冲着成为高级甚至顶层研发人员努力的,希望各位大神大牛解惑
高级研发人员(图像处理与模式识别领域)职位描述1.精通C语言编程,有一年以上C/C++ 程序设计工作经验,开发过商用软件项目者优先2.硕士及以上学历,熟悉Visual C ,有扎实的数学基础,在图像处理,模式识别或计算机视觉方面有较深的理解和一定的实际项目经验,有人脸识别、指纹识别或视频处理经验者优先;3.在计算机或相关领域具有成功申报撰写专利申请书经验者优先;4.熟悉MFC,能利用MFC快速实现Windows平台GUI开发,较强的逻辑思维能力5.具有图象处理与模式识别算法等方面的研究经验和成果,在重要国际学术会议和核心期刊上发表过论文者优先考虑;6.熟悉嵌入式领域开发技术,如嵌入式DSP、C、C++ 等开发技术者优先;
太草率了,连优先之类的字眼都没去掉
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求用matlab画函数图像_百度知道
提问者采纳
clc,m=2;%m赋值l=1;%λ赋值b=10;%X轴边界x1=[-b:-l];x2=[l:b];y1=[];y2=[];for i=1:length(x1)&&& y1=[y1 sign(x1(i))*(abs(x1(i))-(1-exp(-m/(abs(x1(i))^2-l^2)))*l)];&&& y2=[y2 sign(x2(i))*(abs(x2(i))-(1-exp(-m/(abs(x2(i))^2-l^2)))*l)];endplot(x1,y1)hold onplot(x2,y2)
再加一个条件 x的绝对值小于等于lemada的时候 函数等于零 这样能画在一起吗?谢谢
在后面加上hold onx3=-l:0.5:l;y3=zeros(size(x3));plot(x3,y3)
提问者评价
谢谢谢谢谢谢啦!!!
其他类似问题
14人觉得有用
这个不难,根据x的取值,该曲线有两支。codes如下:lambda = .3; %自己确定lambda的取值大小;mvalue = 1;
%自己确定m的取值大小;x1 = -3*lambda:.01:-x2 = lambda:.01:3*t1 = 1-exp(-mvalue./(x1.^2-lambda^2));t2 = 1-exp(-mvalue./(x2.^2-lambda^2));y1 = x1 + lambda*t1;y2 = x2 - lambda*t2;plot(x1,y1,x2,y2)
函数图像的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁已有天涯账号?
这里是所提的问题,您需要登录才能参与回答。
&天涯问答&是天涯社区旗下的问题分享平台。在这里您可以提问,回答感兴趣的问题,分享知识和经历,无论您在何时何地上线都可以访问,此平台完全免费,而且注册非常简单。
怎样用matlab已知图像求函数方程
我通过点求得图像,想反推函数方程
09-08-28 &匿名提问 发布
我去图书馆查了:Matlab与VC++混合编程的研究及其在图象处理中的应用&&解放军医学杂志&& 2000年第4期Visual C++与Matlab混合编程方法在图像处理中的应用The Application of Mixed Programming Between Visual C++ &#160;and Matlab on Image Processing 关键词: 图像处理 &#160; Matlab &#160; 混合编程 1 &#160;引言Matlab是美国Mathworks公司于20世纪80年代中期推出的一套数值计算软件,可以实现数值分析、矩阵运算、自动控制、信号处理和图像处理等若干领域的计算和图形显示功能。它不仅包含大量高度集成的函数可供直接调用以解决各种复杂的计算,而且提供了简洁的人机界面、丰富的图形用户界面GUI(Graphical User Interfaces)开发功能以及求解特定学科问题的求解工具箱ToolBox。与此同时编写程序Matlab所需时间往往能比使用其他编程语言缩短许多倍。自面世以来,Matlab在教学和科研等领域受到了广泛的重视和应用, 在解决复杂的数学计算和新算法的研究中具有极大的优势。1.1 &#160;软件的特点归纳[4](1) 易学易用性 Matlab是一门编程语言,其语法规则和C语言大同小异,因而具有一般编程语言基础的用户很快就可以掌握。 (2) 代码短小高效 Matlab将不同数学分支的算法以函数的形式分类成库,使用时直接调用这些函数并赋予实际参数就可以解决问题,快速而准确。(3) 计算功能强大 该软件具有强大的矩阵计算功能,除了一般的加、减、乘、除、转置和求逆运算外,还非常适合处理稀疏矩阵等特殊矩阵运算以及有限元等大型数值算法的编程。(4) 可扩展性能 Matlab 最重要的特点是易于扩展,它允许用户自行编写指定功能的m文件,组成自己的工具箱。当前支持Matlab的商用ToolBox(工具箱)有数百种之多。 Matlab支持DDE和ActiveX自动化等机制,可以与同样支持该技术的应用程序接口。利用m文件或MEX文件可以实现也VB、VC等程序的进程内无缝集成;利用web服务器,可实现Matlab与网络程序的接口;利用API函数,还可以实现Matlab与硬件的接口。1.2 &#160;Matlab自身所存在的某些不足也限制了它的应用范围(1) Matlab是一种解释性语言,所以它的代码执行速度慢,这对于实时性要求较高的领域,如自动控制、信号处理等,其实时效率是较差的。(2) Matlab程序不能脱离其环境运行,其功能只能在它本身所提供的平台上使用,因而不能被用于开发商用软件。(3) Matlab程序可被直接看到源代码,因而算法和数据的保密性欠佳。Visual C++(以下简称VC)是Microsoft公司推出的强大的可视化集成编程环境, 从底层软件到上层直接面向用户的软件都可以用VC开发, 而且强大的调试功能也为大型复杂软件的开发提供了高效的排错手段。使用VC开发的系统具有界面友好、代码效率高和执行速度快等一系列优点. 同时C++语言支持面向对象的程序设计, 而利用面向对象方法设计的软件具有良好的可重用性、可维护性和可扩充性等特点。它是目前综合性最高、最强大、也是最复杂的软件开发工具之一, 应用极为广泛。因此实现VC与Matlab混合编程,使两者结合起来,协同工作,将大大减少编程的工作量、提高程序执行效率。利用VC这一优秀编程工具可以弥补Matlab在处理具体问题时的缺陷,利用Matlab的强大数值运算等功能则可以增强VC对信号处理、三维处理、自动控制等方面的能力。两者结合将会充分发挥各自的优势,必将提高软件开发效率,使开发的软件具有更高的性能,更广阔的应用领域。2 &#160;VC++与Matlab的接口技术简介2.1 &#160;在VC环境中调用Matlab程序主要方法为将Matlab的强大功能融入到各种应用程序中,通过高级语言编译器将Matlab的m文件编译为二进制代码已成为研究热点。(1) 在VC中启用MATLAB EN GINE(引擎),采用客户机/服务器(Client/Server)的计算模式。这种方式需要Matlab在后台运行,离不开Matlab环境。但是它可以调用Matlab工具箱函数和图形函数。(2) 利用MATLAB COMPIL ER(编译器),将Matlab 的函数编译成脱离Matlab环境的可执行程序(.exe文件), 在VC中调用。(3) 利用Matlab的数学函数和图形库。6.1版本的Matlab软件包中提供了C/C++的数学函数和图形库,通过其编译器可以将Matlab中编写的m 文件转换成以C/C++代码的文件,而且可以将m文件生成dll库,甚至可以直接调用其库函数,生成不依赖Matlab的可执行文件。(4) MIDEVA(Matcom)是第一个由Matlab到C++的编译开发软件平台.使用Matcom编译器可以将Matlab源代码译成同等功能的C++ 代码,并编译为EXE或DLL文件。既保持了Matlab的优良算法,又提高了执行速度。它还支持一定的图形显示,生成代码的可读性很好。因其简单便捷、功能强大、应用灵活,本文采用这种实现方案。3 &#160;Matcom在图像处理程序中的具体使用方法和技巧下面以实现图像处理中绘制直方图和快速傅立叶变换的编程过程为例,介绍通过Matcom实现VC对Matlab程序的调用过程,运行环境为:WindowsXP、Matlab6.5、Matcom4.5、Visual C++6.0。 &#160; 3.1 &#160;编译环境设置[2] &#160; 首先安装MIDEVA,然后运行Visual C++6.0,从菜单条中选择Tools/Customize/Add-ins and Macro Files,在出现的对话框中选中Visual Matcom Add-in,关闭对话框,这时在Visual C++[1]的开发环境中看到一个如图1所示的Visual Matcom工具栏,表明安装成功。图1 &#160; &#160; Visual MATCOM图标3.2 &#160;代码编写在MATCOM或者Matlab环境中编写实现绘制图像直方图的文件myhist.m代码如下:function h=myhist(x) &#160;%绘制灰度图像的直方图h=zeros(1,256);[m,n]=size(x)for i=1:mfor j=1:nh(1,x(i,j)+1)=h(1,x(i,j)+1)+1;endendplot(0:255,h)建立一个新的VC++工程或者使用现有的图像处理的MFC工程Dip.dsw,用C++实现DIB图像的读取,获取图像相关信息,图像显示,保存等基本功能 [3]。再建立一个用于图像频域处理的类CFreqPro,将来在此类中添加有关频域处理的成员函数。点击Visual Matcom工具栏上的m++图标,选择保存过的Matlab文件myhist.m进行转化。这时会在VC中出现一个转换完毕的说明文件,文件中如果报告有错误,可以双击C++files文件夹下的myhist.m直接进行修改,不必回到Matlab环境,再重新转化直到没有错误报告为止。在需要使用 myhist()函数的文件中添加头文件matlib.h和myhist.h,加入代码#include”matlib.h”,#include” myhist.h”。在调用matcom的Matrix&LIB& C++库函数之前用initM(MATCOM_VERSION)初始化类库调用,并用exitM()结束对类库的调用。在MFC工程文件中,一般是在一个类(例如CDipDoc)的构造函数中添加initM(MATCOM_VERSION)以完成类库的初始化工作,在该类的析构函数中调用exitM()结束对类库的调用。3.3 &#160;创建图像数据矩阵和将数据矩阵赋给图像数据区的功能核心代码在matcom中,提供了一个双精度Matrix 类型-Mm,因为所有的操作均为矩阵运算。为利用矩阵运算完成图像变换,首先应将其图像数据赋给矩阵变量,而且能将运算后的矩阵变量再回赋到图像数据区 [5]。为此,在CFreqPro中添加成员函数GetMatData()和SetMatData(),分别实现创建图像数据矩阵和将数据矩阵赋给图像数据区的功能。这两个函数对常用的8位灰度图像处理具有较好的通用性和参考价值。核心代码如下(有删节):Mm CFreqPro::GetMatData(){ DWORD SizeImage = nWidth * nH//创建图像数据矩阵,并将其元素初始值设为0m_matBits = zeros(1, SizeImage);//默认的矩阵数据类型是double,首先将其转换为unsigned char型//以便用memcpy内存拷贝命令将图像数据赋给矩阵。m_matBits = muint8(m_matBits);//通过Matrix&LIB&C++库的.addr()函数返回矩阵变量的内存指针,完成对矩阵单元的访问//用memcpy内存拷贝命令将图像数据赋给矩阵。memcpy(m_matBits.addr(), pBits, SizeImage);//由于Mm类型的矩阵是按先列后行的顺序排列,//在此用reshape()函数将创建的一维矩阵m_matBits变为nWidth×nHeight的二维矩阵。//再用rot90()函数将二维矩阵逆时针旋转90度,将矩阵变为nHeight×nWidth的二维矩阵,//并使矩阵的第nHeight行对应图像数据的第一行数据。m_matBits = rot90(reshape(m_matBits, nWidthBytes, nHeight));//将矩阵由unsigned char型转换为double型,以便进行运算m_matBits = mdouble(m_matBits);}///////////////////////////////////BOOL SetMatData(){ //将矩阵数据范围限定于(0—255)m_matBits = mabs(m_matBits);Mm L = m_matBits & 255.0;Mm NotL = !L;m_matBits = times(m_matBits, NotL) + L * 255.0;//将矩阵由double型转换为unsigned char型,以便将图像数据赋给矩阵m_matBits = muint8(m_matBits);//对矩阵进行转置操作 m_matBits = rot90(m_matBits, -1);//将图像数据赋给矩阵memcpy(pBits, m_matBits.addr(), (nWidth * nHeight)*sizeof(unsigned char));return( TRUE );}3.4 &#160;图像的傅立叶变换和绘制直方图函数图像数据矩阵建立后,就可以利用Matrix&Lib&C++库函数通过各种矩阵运算完成图像变换的工作。下面的函数仅实现图像的傅立叶变换和绘制直方图,用同样方法,离散余弦变换、离散沃尔什-哈达玛变换也都能实现。在图像频域处理类CFreqPro中添加成员函数FFT2()Mm CFreqPro::FFT2(CDib *pDibObject){if( pDib!= NULL ) m_pDib = pD//创建图像数据矩阵GetMatData();//获得矩阵的行数和列数Mm mSize = size(m_matBits);//调用Matrix&Lib&C++库函数fft2()完成二维离散傅立叶变换Mm ff = fft2(m_matBits);Mm matTransed =//调用Matrix&Lib&C++库函数fftshift()将频域中心移到矩阵中心ff = fftshift(ff);//调用Matrix&Lib&C++库函数mabs()计算频谱m_matBits = mabs(ff) / sqrt(mSize.r(1,1)*mSize.r(1,2));//绘制直方图myhist(m_matBits); //将矩阵数据赋给图像数据区SetMatData();return matT}运用本方法对一8位灰度图像(如图2)进行了离散傅立叶变换,结果如图3所示,利用myhist()函数实现直方图绘制,结果如图4所示。 &#160; &#160; 图2 &#160; &#160; 测试图像test.bmp &#160; &#160; &#160;图3 &#160; &#160; FFT变换结果4 &#160;结束语在图像处理程序中,既可以直接调用调用Matrix&Lib&C++库函数,也可以在VC环境中转换.m函数文件。如果需要转换的.m文件不是一个函数,而是脚本文件 (Script),则要在工程目录下找到转换文件的.cpp文件,将其中的C代码拷贝到需要调用它的函数里面,也可以按照MATCOM的语法(类似 Matlab的语法)直接进行编写。Matcom还可以实现函数的嵌套。当所编译的.m文件依赖于其他.m文件时,只要把被调用的.m文件与要编译的.m 文件放在同一目录下,把生成的被调用文件的.h和.cpp文件插入到VC开发的工程中就可以了。作者在图像识别程序中使用这种方法来提高程序编写的效率,取得了非常好的效果。 &#160; &#160;
图4 &#160; &#160; 测试图像的直方图参考文献[1] 张志涌等. 精通MATLAB6.5版. 北京:北京航空航天大学出版社,2003[2] MathTools Ltd,MIDEVA.MATCOM&Visual MATCOM Installtion Guide 1999[3] 郎锐. 数字图像处理学Visual c++实现. 北京:北京希望电子出版社,2003[4] 阮沈勇等. MATLAB程序设计. 北京:电子工业出版社,2004[5] Duane Hanselman,B ruce littlefield. 精通MATLAB综合辅导与指南. 西安:西安交通大学出版社,1998VC++与Matlab混合编程的研究与实现摘要 在分析Visual C++和Matlab各自特点的基础上,提出混合编程的几种方法,分析对比各种方案的优缺点。并结合实例介绍比较简便实用的Matcom混合编程方案,该方案不仅能转化成C/C++函数,而且可以支持图形函数功能。可以为科学研究和工程技术提供更强的技术支持。  关键词 Visual C++; M M 混合编程  Matlab是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,命令语句功能十分强大,为科学研究、工程设计及众多学科领域提供了一种简洁、高效的编程工具。但是Matlab使用的是解释性语言,大大限制了它的执行速度;源代码的公开不利于算法和数据的保密;局限于Matlab运行环境而不能用于开发商用软件。Visual C++是Windows平台下主要的应用程序开发环境之一,它能方便实现软件开发,开发的系统具有界面友好、执行速度快、易维护和升级等优点。但是在工程计算方面,和Matlab相比编程显得复杂的多。因此实现VC与Matlab混合编程,使两者结合起来,协同工作,必将提高软件开发效率,使所开发的软件具有更高的性能,更大的应用范围,也可以为科学研究和工程技术提供更强的技术支持。  VC与Matlab混合编程的实现方案  在VC环境中调用Matlab程序主要有以下几种方法:  (1)用Matlab引擎,采用客户机/服务器(Client/Server)的计算模式。在VC中设计程序框架,作为前端客户机,通过调用 Matlab引擎与后台Matlab服务器建立连接,实现命令和数据信息的传递。这种方式需要Matlab在后台运行,离不开Matlab环境。不利于软件的开发,但是它可以充分利用Matlab的功能,包括调用工具箱函数和图形函数。  (2)用Matlab的编译器将.m源文件转化为 c、c++等各种不同类型的源代码,并在此基础上根据应用需要生成MEX文件、独立可执行应用程序等文件类型,大大提高程序的运行速度,提高代码的执行效率。主要是使用mcc命令实现文件的转化。但是这种方法不支持图形函数,不能编译一些Matlab的内建函数,并且转换的代码可读性不太好。  (3)使用Matcom编译器可以将Matlab源代码译成同等功能的C++代码,既保持了Matlab的优良算法,又提高了执行速度。它还支持一定的图形显示,生成代码的可读性很好。因其简单便捷、功能强大、应用灵活,本文主要探讨这种实现方案。  实现VC与Matcom的接口步骤  Matcom是Mathworks公司推出的第一个由Matlab到C++的编译开发软件平台,它的可视化界面,方便丰富的调试功能和对数学库的强大支持受到广大技术人员的重视。现在的最高版本为Matcom4.5。  我们可以通过在Matcom中file菜单下的compile to exe or dll调用.m文件编译,在Matcom的debug目录下找到生成的cpp、exe、dll文件。把需要的文件加到VC开发环境的工程中,再包含头文件就可以实现调用。也可以直接在VC环境下使用科学运算库,即Matcom的Matrix&LIB&,它是按照Matcom的语法在VC中实现类似于Matlab函数的方法。但是这里还有一种将Matcom集成到VC环境的方法,即安装Visual Matcom的方式,这种方式操作更加简便易行,只需要熟悉Matlab编程,经过简单的步骤就可以轻松实现VC环境中调用Matlab。下面介绍 Visual Matcom开发环境的安装。  (1)拷贝&matcom45&\bin\usertype.dat文件(&matcom45&指Matcom的安装路径)到&visual c++&\Common\MSDev98\Bin目录(&visual c++&指VC的安装路径)下。  (2)运行Visual C++,从菜单条中选择Tools/Customize/Add-ins and Macro Files,选择Browse,改变文件类型为Add-ins(.dll),选定&matcom45&\bin\mvcide.dll文件,确定。  (3)这样,可以在Visual C++的开发环境中看到一个如图1所示的Visual Matcom工具栏,表明安装成功。图1 Visual Matcom工具栏应用举例  下面以一个线性方程组的求解过程为例,介绍通过Matcom实现VC对Matlab程序的调用,运行环境:Win2000、Matlab6.1、Matcom4.5、Visual C++6.0  (1)Matlab运行环境中编写程序equation.m,其代码如下:%equation 求解线性方程组的解%线性方程组形如:A*X = Bfunction X = equation(A, B)X = A\B;  (2)这里以一个简单的控制台程序为例,其它程序基本相同。在VC环境中建立一个名为Test的Win32 Console Application工程。  (3)点击Visual Matcom工具栏上的m++图标,选择保存过的Matlab文件equation.m进行转化。如果看到的转化信息提示没有错误就可以观察到此时在 FileView标签中多了m-files,C++files created from m-files,Matrix&lib&等文件。并且该工程目录下增加了equation.h,equation.cpp, equation.mak,equation.r等的4个文件。这时会在VC中出现一个转换完毕的文件,文件中如果报告有错误就要考虑是否程序有问题,可以双击C++files文件夹下的equation.m进行修改,再重新转化直到没有错误报告为止。  (4)在Test工程下建立一个文件test.cpp调用转化的Matlab函数,代码为:#i nclude &stdio.h&#i nclude &matlib.h& //提供转化后C++代码中使用的数据类型,函//数原型及常数#i nclude &equation.h&void main(){ /*解线性方程组: X = */ initM(MATCOM_VERSION); //初始化matlib库 Mm a,b,x; //使用矩阵类Mm构造矩阵a,b,x. a = (BR(1),2,3,semi,4,5,6,semi,7,8,1); //给矩阵a赋值,BR是Matrix&LIB&库的一个 //宏,用于定义一个矩阵的开始;semi是库的//一个常量,用于分隔不同行的矩阵元素 b = zeros(3,1); //初始化矩阵b为零矩阵3行1列 b(1,1) = 37; b(2,1) = 85; b(3,1) = 69; //给矩阵b赋值 x = equation(a,b); //调用转化的函数,求解线性方程组的解 for (int i = 1; i &= x.rows(); i++) //把解矩阵X的元素显示出来 {  for (int j=1;j&=x.cols();j++)   printf(&x(%d,%d)=%f\n&,i,j,x.r(i,j)); } exitM(); //结束对matlib库的调用 }  注意:程序中涉及到了两个成员函数.rows()和.cols(),它们分别返回矩阵的行数和列数;x.r(i,j)代表矩阵x的第i行第j列的元素。  (5)编译运行后结果为x(1,1) = 3.000000 x(2,1) = 5.000000 x(3,1) = 8.000000与实际结果一致。  总结:如果需要转换的.m文件不是一个函数,只是一些Matlab命令的集合,则要在工程目录下找到转换文件的.cpp文件,将其中的C代码拷贝到需要调用它的函数里面。Matcom克服了mcc命令只能编译一个独立.m文件的缺点,当所编译的.m文件依赖于其他.m文件时,只要把被调用的.m文件与要编译的.m文件放在同一目录下,生成的被调用文件的.h和.cpp文件插入到VC开发的工程中就可以了。  上面只是一个简单的控制台工程的例子,我们也可以建立其它类型的工程,只要在需要调用转换后函数的程序中包含matlib.h并且在响应函数中初始化matlib库initM(MATCOM_VERSION);结束调用后做结束工作exitM();就可以了。  结束语  本文讨论了VC与Matlab的混合编程,主要集中讨论在VC中调用Matlab的实现方案。通过一个Matcom编译实现的例子我们看到,利用 Visual Matcom转换代码非常方便,生成的代码可读性好,而且还支持多数图形函数,基本上使Matlab和VC能够得到充分的发挥。作者在海洋遥感图像处理中使用这种方法来提高程序的执行速度,取得了非常理想的效果。它不仅解决了Matlab的解释执行方式带来的执行速度过慢的缺陷,更重要的是它完全脱离了 Matlab系统,当代码被编译成可执行程序后,又可大大提高程序的安全性。
请登录后再发表评论!
说的太好了,我顶!
Copyright & 2014
Corporation, All Rights Reserved
Processed in 0.3929 second(s), 3 db_queries,
0 rpc_queries}

我要回帖

更多关于 matlab origin 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信