ans =
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
>> sum(ans)
ans =
1.7205 1.0404 0.7299
>> sum(ans)
ans =
3.4908
5.fix
Round toward zero
a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i] a = Columns 1 through 4 -1.9000 -0.2000 3.4000 5.6000 Columns 5 through 6 7.0000 2.4000 + 3.6000i fix(a) ans = Columns 1 through 4 -1.0000 06.工作空间变量可以覆盖掉MATLAB系统自带的预定义函数
ans =
0.8415
>> sin = 1
sin
sin =
1
sin =
1
Create text object in current axes
text(x,y,'string')
text(x,y,z,'string')
text(x,y,z,'string','PropertyName',PropertyValue....)
text('PropertyName',PropertyValue....)
h = text(...)
8.pixels(:, :, :, i) = img; img为一张三维的彩色图像
pixels是一个4D矩阵,当i变量确定时,pixels(:, :, :, i)即为一个三维矩阵,pixels的第四维表示帧数,在帧序号固定时,pixels(:,:,:,6)为一个三维变量,将img三维变量中的所有数值赋值给pixels的三维
9,计时函数 tic, toc 搭配进行计时 延时函数: pause(n); 表延时n秒n可以为浮点数
a、tic和toc函数
t(i) = toc;
matlab将矩阵各列大于某个数的元素置零
m=min(A) % 求各列最小值
M=repmat(m,size(A,1),1) % 按行复制最小值和原矩阵同维数
A(A>M)=0 % 置各列比最小值大的数为零
A =
0.4387 0.4898 0.2760 0.4984
0.3816 0.4456 0.6797 0.9597
0.7655 0.6463 0.6551 0.3404
0.7952 0.7094 0.1626 0.5853
0.1869 0.7547 0.1190 0.2238
m =
0.1869 0.4456 0.1190 0.2238
M =
0.1869 0.4456 0.1190 0.2238
0.1869 0.4456 0.1190 0.2238
0.1869 0.4456 0.1190 0.2238
0.1869 0.4456 0.1190 0.2238
0.1869 0.4456 0.1190 0.2238
A =
0 0 0 0
0 0.4456 0 0
0 0 0 0
0 0 0 0
0.1869 0 0.1190 0.2238
但 是这种方法只能添加newbox目录,如果该目录下有其他子文件夹,并且运行时候“隐式”调用到这些子文件夹(例如假设newox目录下存在子文件夹 matdata,该子文件夹下有logo.mat这个文件,且在m文件代码中使用了诸如 load logo 这样的句子,即没有显式给出logo.mat的具体路径,则称为“隐式”),则不能正确访问。因此,有必要在添加时使用以下语句把newbox目录下所有 文件夹都添加到搜索路径中:
程序代码 addpath(genpath('/opt/matlab/toolbox/newbox'));
genpath('../') 可以产生当前路径所在位置的上一级文件内包含的所有文件路径
rmpath /opt/matlab/toolbox/newbox;
打开.itl文件 Mac OS Apple iTunes Windows Apple iTunes Linux
对文件的打开和操作函数 fopen 读文件内容函数用 fscanfcatch
end
continue语句经常与for,while循环合用。当循环语句中出现continue时,则不再继续执行当前循环体内的程序语句,即提前结束当前循环,并继续执行下一个循环。
>> %本程序实现在2-100中,找出不能被2,3,5,7,11整除的数
i=1;
for n=2:100
end
X
X =
>> %本程序实现在2-100中,找出不能被2,3,5,7,11整除的数,输出第2个
i=1;
for n=2:100
end
X(2)
ans =
break与continue相似,也是经常与for while合用,但它不是继续执行下一个循环,而是退出循环体,继续执行循环体之外的程序。即终止循环!
matlab中用imshow()显示图像与图像矩阵的数据类型的关系(转载)
在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。
那么如何解决这个问题呢?笔者曾经用fix()函数把图像矩阵由实数形式转化成整数形式,但这样仍无法改变图像矩阵是double型的事实。
通过搜索,找到两个解决方法:
imshow(I/256); ----------将图像矩阵转化到0-1之间
imshow(I,[]); -----------自动调整数据的范围以便于显示 (不明白原理!)
PS:imshow(I,[]),将I的最小值看作0,最大值看作255,所以黑白明显
从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!不知什么原理!
此外还找到一些方法,还没有试过,记录如下:
uint8和im2uint8的区别
图像数据在计算前需要转换为double,以保证精度; 很多矩阵数据也都是double的,要想显示其,必须先转换为图像的标准数据格式. 如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8
如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255) 最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double)
另外,可以用isgray判断矩阵是否是一个图像数据矩阵
总之,im2uint8、im2double要跟uint8、double
图像取反函数imcomplement。 图像拉伸函数: stretchlim 也可以用张铮教材提供的函数 分段线性变换函数imggreayscaling
灰度图像二值化,时经常出现问题,查看im2bw函数,里面有一个判断灰度图像A的数值范围的函数:range = getrangefromclass(A); 函数内部的定义为range = double([intmin(classType) intmax(classType)]); 通过intmin和intmax来检测最大最小值,而这两个函数检测的均为整数值:如inimin注释:%INTMIN Smallest integer value. 所以二值化的时候要先将图像从double类型转化回uint8或其它im2bw指定的nargin型