一、图像的读取和显示
A=imread(FILENAME,FMT)
f = imread('D:\myimage\chestxray.jpg');
二、图像的写入
inwrite(A,FILENAME,FMT)
inwrite(f,'patient10_run1.tif')
只使用于JPEG图像
imwrite(f,'filename.jpg','quality',q)
三、图像的显示
imshow(f,[low high])
figure; %创建一个新窗口
subplot(m,n,p);%打开一个有m行n列图像%位置的窗口,并将焦点位于第p个位置上。
%%=======================
figure;
subplot(m,n,p);
inshow(f);
四、图像格式的转换
im2uint8 将图像装换成uint8类型 将输入中所有小于0的值设置为0,大于1的值设置为255,其他值乘以255.
im2uint16 将图像装换成uint16类型
rgb2gray 从RGB图创建灰度图,存储类型不变。
im2bw(f,T) 通过阈值处理,将一幅亮度图像转换成一幅二值图像g。
im2double 将图像转换成double类型(Matlab中所有的数值计算都可用double类来进行,所以它也是图像处理应用中最常见使用的数据类)
mat2gray 讲一个矩阵转换成一个强度图(但是什么叫强度图呢?)0对应的是黑色,1对应的是白色。
补充知识点:
1、TIFF 加标识的图像文件格式 .tif .tiff
2、当用imshow显示另一幅图像g时,Matlab会再屏幕上用新图像替换旧图像,为了保持第一幅图像并同时显示第二幅图像,可以使用figure函数。
figure,imshow(g)
3、图像的类型:亮度图像、二值图像、索引图像、RGB图像。
4、若v是一个向量,则v(:)产生一个列向量,v(1:end)产生一个行向量。
5、ture(M,N)生成一个大小为M*N的logical类矩阵,其元素为1.
false(M,N)生成一个大小为M*N的logical类矩阵,其元素为0.
6、rand(M,N)生成一个大小为M*N的矩阵,矩阵中元素都在区间[0,1]中均匀分布的随机数。
randn(M,N)生成一个大小为M*N的矩阵,矩阵中元素是正态分布的随机数,随机数的均值是0,方差是1.
7、函数定义:function[outputs]=name(inputs) 注意输出变量必须位于方括号内,而输入变量必须位于圆括号内。
8、算数运算符 A*B表示矩阵乘法,而A.*B则表示数组乘法。
9、B=A指的仅仅是做一个B等于A的“记录”,但实际上并不将数据复制到B。记住MATLAB没有复制信息这一功能。
10、all函数:检测矩阵中是否全为非零元素,如果是,则返回1,否则,返回0。
any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0。
11、可以用whos f 来查看图片的信息。
12、f(x,y)=Asin(ux+vy) x=0,1,2……,M-1 y=0,1,2……,N-1 生成该图像
%First implement using for loops
tic
for r = 1:M
ux = u*(r-1);
for c = 1:N
vy = v*(c-1);
f(r,c) = A*sin(ux+cy);
end
end
t1 = toc; %End timing
%Now implement using vectorization. call the image g
tic %start timing
r = 0:M-1;
c = 0:N-1;
[C,R] = meshgrid(c,r); %将行向量c,r指定的域变换成数组C,R
g = A*sin(u*R + v*C);
t2 = toc; %End timing
%compute the ratio of the two times
rt = t1/(t2 + eps);
[rt,f,g] = twodsin(1,1/(4*pi),1/(4*pi),512,512);
g = mat2gray(g);
imshow(g)
向量化循环效率更高。
12、从给定图像中提取子图像,提取大小为m*n且其左上角坐标为(rx,cy)的区域s
rowhigh = rx+m-1; %Matlab中图像的原点在(1,1)处
colhigh = cy+n-1;
s = f (rx:rowhigh,cy:colhigh);