matlab怎么将生成的m序列量化为-1到1之间的数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab怎么将生成的m序列量化为-1到1之间的数相关的知识,希望对你有一定的参考价值。
就是将生成m序列4个一组进行16进制转化,然后对应进行量化,量化成-1,-0.9,-0.8,……0,……0.9,1之间的数,然后生成一个矩阵,怎么用matlab实现。
或者简单点,怎么生成m序列,然后转化成一个矩阵,matlab实现。
谁会啊?这个问题急!谢谢!
这样吧,怎么用matlab生成一个伪随机矩阵?这个谁会?
⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。
⑵BMP(Windows Bitmap):有1位、4位、8位、24位非压缩图像,8位RLE(Run length Encoded)的图像。文件内容包括文件头(一个BITMAP FILEHEADER数据结构)、位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。
⑶PCX(Windows Paintbrush):可处理1位、4位、8位、16位、24位等图像数据。文件内容包括文件头、图像数据和扩展色图数据。
⑷TIFF(Tagged Iamge File Format):处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24位packbit压缩图像,1位CCITT压缩图像等。文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。
⑸PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。
⑹GIF(Graphics Interchange Format):任何1位到8位的可交换的图像。
⑺HDF(Hierarchial Data Format):有8位、24位光栅图像数据集。
⑻ICO(Windows Icon resource):有1位、4位、8位非压缩图像。
⑼CUR(Windows Cursor resource):有1位、4位、8位非压缩图像。
⑽XWD(X Windows Dump):包括1位、8位Zpixmaps,XYBitmaps,XYPixmmmaps。
⑾RAS(Sun Raster image):有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。
⑿PBM(Portable Bitmap)。
⒀PGM(Portable Graymap)。
⒁PPM(Portable Pixmap)。
2.MATLAB支持五种图像类型,即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。
图像类型
Double数据
uint8和uint16数据
二值图像
图像为m×n的整数矩阵,元素值范围[0,1]
图像为m×n的整数矩阵,元素值范围[0,1]
索引图像
图像为m×n的整数矩阵,元素值范围[0,p]
图像为m×n的整数矩阵,元素值范围[0,p-1]
灰度图像
图像为m×n的浮点数矩阵,元素值范围[0,1]
图像为m×n的整数矩阵,元素值范围[0,255]或[0,65535]
RGB图像
图像为m×n×3的浮点数矩阵,元素值范围[0,1]
图像为m×n×3的整数矩阵,元素值范围[0,255]或[0,65535]
其中,多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。cat函数可以将具有相同尺寸的几个独立图像存成多帧文件。对于多帧图像也可以从中提取单帧。
2.2.2 图像类型判断及转换
1.在MATLAB中如果要判断一个图像文件的类型,可使用如下指令:
l isbw:若图像为二值图像,则返回真。
l isgray:若图像为灰度图像,则返回真。
l isind:若图像为索引图像,则返回真。
l isrgb:若图像为RGB图像,则返回真。
2.在MATLAB系统中,要将一个类型的图像文件转换成另一个类型的图像文件,只需将前一个文件的图像数据用imread读出,再用imwrite以适当的格式写到后一个图像文件中去即可。另外,要将灰度图像I转换成RGB图像,可运用cat指令。cat函数可以把一些单一的图像合并成图像序列。在图像序列中每个图像需有相同的大小,如果是索引图像,色图也要一致。
此外,MATLAB还提供了若干函数,用于图像类型的转换。这些函数有:
l dither:用抖动法(dithering)转换图像。该函数通过颜色抖动(颜色抖动即改变边沿像素的颜色,使像素周围的颜色近似于原始图像的颜色,从而以空间分辨率来换取颜色分辨率)来增强输出图像的颜色分辨率。该函数可以把RGB图像转换成索引图像或把灰度图像转换成二值图像。
l gray2ind:灰度图像或二值图像向索引图像转换。
l grayslice:设定阈值将灰度图像转换为索引图像。
l im2bw:设定阈值将灰度、索引、RGB图像转换为二值图像。
l im2double:将图像数组转换为double型。
l im2uint8:将图像数组转换为uint8型。
l im2uint16:将图像数组转换为uint16型。该函数不支持二值图像序列的转换。
l ind2gray:索引图像向灰度图像转换。
l ind2rgb:索引图像向RGB图像转换。
l mat2gray:将一个数据矩阵转换为灰度图像。
l rgb2gray:RGB图像向灰度图像转换或将彩色色图转换成灰度色图。
l rgb2ind:RGB图像向索引图像转换。包含三种不同方法:均衡量化、最小值量化、色图映射。
l im2java:一般图像向Java图像转换。
l label2rgb:标志图像向RGB图像转换。
2.2.3 图像的查询及读写
在MATLAB中要查询一个图像文件的信息,只要用imfinfo指令加上文件及其完整路径名即可。函数调用格式为:
info = imfinfo(filename,fmt)
info = imfinfo(filename)
参数fmt对应于所有图像处理工具箱中所有支持的图像文件格式。
MATLAB提供了两个重要的用于图像文件的读写的指令,分别是从图像文件中读取数据的imread,以及将数据写入到图像文件中的imwrite。
1.imread的常见调用格式为:
A = imread(filename,fmt)
其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。
imread的其他几种重要的调用格式为:
[X,map] = imread(filename.fmt)
[…] = imread(filename)
[…] = imread(URL,…)
[…] = imread(…,idx) (CUR,ICO and TIFF only)
[…] = imread(…,’frames’,idx) (GIF only)
[…] = imread(…,ref) (HDF only)
[…] = imread(…,’BackgroundColor’,BG) (PNG only)
[A,map,alpha] = imread(…) (ICO,CUR and PNG only)
上面一些参数的含义如下:idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。’frame’,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。ref是指整数值。alpha是指透明度。
2.imwrite的常用调用格式为:
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
imwrite(…,filename)
imwrite(…,Param1,Val1,Param2,Val2…)
其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。
在MATLAB中,默认的保存类型是uint8。由于PNG和TIFF格式支持16位的图像,所以保存这类图像时,保存类型就是uint16。
2.2.4 图像的显示
显示图像的最基本的手段是使用image函数。该函数还产生了图像对象的句柄,并允许对对象的属性进行设置。此外,imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色图的方式显示。
imshow函数比image和imagesc更常用,它能自动设置句柄图像的各种属性。imshow可用于显示各类图像。对于每类图像,调用方法如下:
l imshow filename:显示图像文件。
l imshow(BW):显示二值图像,BW为黑白二值图像矩阵。
l imshow(X,map):显示索引图像,X为索引图像矩阵,map为色彩图示。
l imshow(I):显示灰度图像,I为二值图像矩阵。
l imshow(RGB):显示RGB图像,RGB为RGB图像矩阵。
l imshow(I,[low high]):将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[low high]用于定义待显示数据的范围。
有关图像显示的函数或其辅助函数,除了上述的以外,MATLAB还提供了一些用于进行图像的特殊显示的函数。
l colorbar:为图像的显示增加一个颜色条,这一用法对于了解被显示图像的灰度级别特别有用。
l getimage:获取图像数据。
l immovie:将多帧索引图像制作成连续图像格式。其调用格式为:
mov = immovie(D,map)
不过这种功能只对索引图像有效,其中D为多帧索引图像阵列,map为索引图像的对应色阶。对于其他类型图像,则需要首先将其转换为索引图像。
l montage:多帧图像的一次显示。它能将每一帧分别显示在一幅图像的不同区域,所有子区的图像都用同一个色彩条。
l movie:播放多帧连续图像。
l subimage:在一个图形区域内显示多个图像。
l truesize:调整图像显示的尺寸。
l warp:显示图像的纹理表面图。前面提到的图像显示手段都只能在二维平面上显示,MATLAB6.5的一个强大功能是能将平面图像显示在空间三维曲面上。这是由warp函数的纹理成图功能来实现的,该功能能通过双线性插值将平面图像投影到三维曲面上。
l zoom:将图像或二维图形进行放大或缩小显示。zoom本身是是一个开关键,zoom on用于打开缩放模式,zoom off用于关闭该模式,zoom in用于放大局部图像,zoom out用于缩小图像。
至于多个图像的显示,则可分为两个方面:在不同的图形窗口显示不同的图像,可以用figure指令来实现;在同一个图形窗口显示多图,可以用subplot来实现。
第三章 图像运算
3.1 图像的点运算
点运算将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的值决定。它常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。点运算因其作用性质,也被称为对比度增强、对比度拉伸或灰度变换。在真正进行图像处理之前,有时可以用点运算来克服图像数字化设备的局限性。
点运算实际上是灰度到灰度的映射过程。点运算不会改变图像内像素点之间的空间关系。设输入图像为A(x, y),输出图像为B(x, y),则点运算可表示为:
B(x, y) = f [A(x, y)] (3-1)
点运算可完全由灰度变换(gray-scale transformation)函数s=f (r)决定,后者描述了输入灰度级与输出灰度级之间的映射关系。图像的点运算分为线性点运算和非线性点运算两种。
3.1.1 线性点运算
线性点运算是指灰度变换函数f为线性函数时的运算。
如图3.1,当a>1时,输出图像对比度增大;当a<1时,输出图像对比度降低;当a=1,b=0时,输出图像就是输入图像的简单复制;当a=1,b≠0时,仅使输出图像的灰度值上移或下移,其效果是使整个图像更亮或更暗。如果a为负值,暗区域将变亮,亮区域将变暗,点运算完成了图像求补。
除了调节对比度以外,还有一种典型的线性点运算的应用就是灰度标准化。设灰度图像为I[W][H],其中W表示图像宽度,H表示图像的高度,那么灰度图像的平均灰度和方 图3.1 线性函数
差由如下计算公式得到:
平均灰度:
(3-2)
方差:
(3-3)
可以将其变换为具有相同均值和方差的变换函数(线性映射),其形式如下:
(3-4)
其中σ0和u 0为给定的变换参数。灰度标准化可以用来生成一些常用的平均模型。
3.1.2 非线性点运算
非线性点运算对应于非线性映射函数,典型的映射包括平方函数、对数函数、截取函数(窗口函数)、域值函数、多值量化函数等。
阈值化处理是最常用的一种非线性点运算,它的功能是选择一阈值,将图像二值化,然后使用生成的二进制图像进行图像分割及边缘跟踪等处理。
直方图均衡化也是一种非常常用的非线性点运算。它是指将一个已知灰度分布的图像使用某种非线性灰度变换函数进行计算,使运算结果变成一幅具有均匀灰度分布的新图像。经过直方图均衡化的点运算处理后,实际的直方图将呈现参差不齐的外形,这是由于灰度级的可能个数是限造成的。在一些灰度级处可能没有像素,在另外一些灰度级处则像素很拥挤。
点运算的MATLAB实现:
I=imread('rice.png');
rice=double(I);
rice2=rice*0.5+50;
J=uint8(rice2);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);
转载的地址忘啦。呵呵
参考技术A m=random(4,5) 生成一个4*5的随机矩阵追问
要的是伪随机
追答不明白什么意思 电脑生成的随机数不都是伪随机的么 还能指望电脑真的生成随机数么
追问可老师说是m序列产生的伪随机序列,然后转化为矩阵,就是一个伪随机矩阵了。
追答那得用for 循环
a=zeros(length(m),4) %初始化矩阵
b=0 %初始计数器
for i=m
b=b+1
a(floor(b/4)+1,mod(b,4)+1)=i %矩阵赋值
end
赚这50分真难 ⊙﹏⊙b汗
X1=1;X2=0;X3=1;X4=0; %移位寄存器输入Xi初值
m=60; %置M序列总长度(最大为63)
for i=1:m %1#
Y4=X4; Y3=X3; Y2=X2; Y1=X1;
X4=Y3; X3=Y2; X2=Y1;
X1=xor(Y3,Y4); %异或运算
if Y4==0
U(i)=-1;
else
U(i)=Y4;
end
end
M=U
这样即生成了一个四阶的m序列,近似为白噪声。然后将它转化为矩阵即可:
for i=1:N
MM(i,j)=M(mod(j-i,N)+1);
end
这样差不多就是一个伪随机矩阵MM()了吧追问
你给我写个八介的m序列吧,还有那个for i=1:N有问题,不能转化成矩阵。嗯,有劳你你了!
追答%生成8阶m序列最大周期为255
X1=1;X2=0;X3=1;X4=0; X5=1;X6=0;X7=1;X8=0; %移位寄存器输入Xi初值
m=255; %置M序列总长度(最大为2的n次方-1)
for i=1:m %1#
Y8=X8; Y7=X7; Y6=X6; Y5=X5;Y4=X4; Y3=X3; Y2=X2; Y1=X1;
X8=Y7; X7=Y6; X6=Y5; X5=Y4; X4=Y3; X3=Y2; X2=Y1;
X1=xor(Y7,Y8); %异或运算
if Y8==0
U(i)=-1;
else
U(i)=Y4;
end
end
M=U
%以上都类似
for i=1:m
for j=1:m
MM(i,j)=M(mod(j-i,m)+1);
end
end
%不好意思 刚才落下了一个循环
k= 0.099 r1=92.0% r2=89.3%
k= 0.291 r1=92.6% r2=89.8%
k= 0.463 r1=95.0% r2=91.0%
k= 0.655 r1=92.6% r2=92.2%
k= 0.905 r1=94.0% r2=90.5%
你能将上面数据用matlab画成坐标图吗?画了我给你加分
k=[0.099 0.291 0.463 0.655 0.905];
r1=[92 92.6 95 92.6 94];
r2=[89.3 89.8 91 92.2 90.5];
plot(k,r1,'r',k,r2,'b');
legend('r_1','r_2');
xlabel('k'); ylabel('r');
这样子可以吗?
怎么用matlab生成随机数,排序,取数排序前的位置?
clearNum=input('please
input
Num=');
M=input('please
input
M=');
N=input('please
input
N=');
%我也不知道你的Num,M,N是什么,你自己输入吧!
A=5*rand(1,Num);%产生Num个随机数
[B,Ix]=sort(A,'descend');
%对产生的随机数按由大到小的顺序排序,并取随机数在排序前的位置Ix
x=floor(Ix./N);%将排序前的位置除以N
所得商作为横坐标x
y=rem(Ix,N);%所得余数作为纵坐标y
I=Ix(1:M);%取排序后前M个随机数在排序前的位置
X=x(1:M);
Y=y(1:M);
%I,X,Y为你所求!
%以下是你复制所有上面代码后运行举例!
please
input
Num=10
please
input
M=5
please
input
N=4
>>
I
I
=
9
6
1
7
8
>>
X
X
=
2
1
0
1
2
>>
Y
Y
=
1
2
1
3
0 参考技术A 楼主你好!
产生一组平均分布(产生了1440个):
r=unifrnd(0,1:1440)
产生一组正态分布:(其中,取mu=720,sigema=240)
r=normrnd(720,240,[1,6])(其中,方括号的6代表了生成6个,您需要多少个,就改成多少个好啦)
上面都是我刚调试过的,如果还有问题请联系我哈~
希望您满意
补充:
楼主,我根据您的要求重新写了一下程序,
a=rand(1)
if(a<0.2&a>0)
r=(normrnd(540,5))
end
if(a>=0.2&a<0.4)
r=(normrnd(780,5))
end
if(a>=0.4)
r=(normrnd(1200,5))
end
x=int32(r)
x就是所需的结果,a是用于您指定的出现概率的。
里面并没有涉及您的取值范围。这是因为在6*方差的范围内,正态分布的取值基本已经可以涵盖全部的取值了(99.8%的样子吧)
所以基本没可能出在这个规定范围之外。
希望您满意~
以上是关于matlab怎么将生成的m序列量化为-1到1之间的数的主要内容,如果未能解决你的问题,请参考以下文章