一、图像文件的读写
1.colorbar函数将颜色条添加到坐标轴对象中
%colorbar函数将颜色条添加到坐标轴对象中
RGB=imread(\'drum.bmp\') %图像读入
I=rgb2gray(RGB); %把RGB图像转化为灰度图像
h=[1 2 1;0 0 0;-1 -2 -1];
I2=filter2(h,I); %使用指定的滤波器h对I进行滤波,结果保存在I2中
imshow(I2,[]),colorbar(\'vert\') %将颜色条添加到坐标轴的对象中
%vert--垂直,horiz--水平
2.warp将图像图像进行文理映射
%warp将图像图像进行文理映射
A=imread(\'drum.bmp\');
I=rgb2gray(A);
[x,y,z]=sphere;
warp(x,y,z,I); %用warp函数将图像作为纹理进行映射
3.subimage函数实现在一个图形窗口内显示多幅图像
%subimage函数实现在一个图形窗口内显示多幅图像 RGB=imread(\'drum.bmp\'); I=rgb2gray(RGB); subplot(1,2,1),subimage(RGB) subplot(1,2,2),subimage(I) %subplot(1,2,1)是指一个1行2列的图中从左到右从上到下第1个位置
二、图像处理的基本操作
1)图像代数运算
1.imadd函数实现两幅图像的相加或者给一幅图像加上一个常数
I=imread(\'drum.bmp\'); J=imadd(I,100); %给图像增加亮度 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
2.imsubtract函数实现将一幅图从另外一幅图像中减去,或者从一幅图像中减去一个常数
I=imread(\'drum.bmp\'); J=imsubtract(I,100); %给图像减少亮度 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
3.immultiply函数实现两幅图像的相乘或者一幅图像亮度的缩放
I=imread(\'drum.bmp\'); J=immultiply(I,0.5); %给图像进行亮度缩放 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
4.imdivide函数实现两幅图像的除法或者一幅图像或一幅图像亮度的缩放
I=imread(\'drum.bmp\'); J=imdivide(I,0.5); %给图像进行亮度缩放 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
2)图像空间域操作
1.imresize函数实现图像的缩放
I=imread(\'drum.bmp\'); J=imresize(I,5); %给图像进行缩放 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
2.imrotate函数实现图像的旋转
I=imread(\'drum.bmp\'); J=imrotate(I,45,\'bilinear\'); %对图像进行旋转 %围绕图像中心旋转angle度,正表示逆时针旋转,负表示正时针旋转。 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
3.imcrop函数实现图像的剪切
I=imread(\'drum.bmp\'); J=imcrop(I,[75 68 130 112]); %对图像进行剪切 %[xmin,ymin,wight,height] subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
3)特定区域处理
1.roipoly函数用于选择图像中的多边形区域
I=imread(\'drum.bmp\'); c=[200 250 278 248 199 172]; r=[21 21 75 121 121 75]; J=roipoly(I,c,r); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
2.roicolor函数是对RGB图像和灰度图像实现按灰度值或亮度值选择区域进行处理
a=imread(\'drum.bmp\'); I=rgb2gray(a); J=roipoly(I,128,225); %按灰度值选择的区域 subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
3.poly2mask函数转化指定的多边形区域为二值掩模
x=[63 186 54 190 63]; y=[60 60 209 204 60]; I=poly2mask(x,y,256,256); %转化指定的多边形区域为二值掩模 imshow(I); hold on %打开图形保持功能 plot(x,y,\'b\',\'LineWidth\',2); %plot(x,y,\'r\',\'limewidth\',4);线条粗细;r-红色,g-绿色,b-蓝色,c-青色,m-紫色,k-黑色,w-白色,y-黄色 hold off %关闭图形保持功能
4.roifilt2函数实现区域滤波
a=imread(\'drum.bmp\'); I=rgb2gray(a); c=[200 250 278 248 199 172] r=[21 21 75 121 121 75] BW=roipoly(I,c,r); %roipoly函数用于选择图像中的多边形区域 h=fspecial(\'unsharp\'); %unsharp为对比度增强滤波器 J=roifilt2(h,I,BW); %区域滤波 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
5.roifill函数实现对特定区域进行填充
a=imread(\'drum.jpg\'); I=rgb2gray(a); c=[200 250 278 248 199 172] r=[21 21 75 121 121 75] J=roifill(I,c,r); %roifill函数实现对特定区域进行填充 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
4)图像变换
1.fft2函数和ifft2函数分别是计算二维的快速傅里叶变换和反变换
f=zeros(100,100); f(20:70,40:60)=1; imshow(f); F=fft2(f); F2=log(abs(F)); imshow(F2),colorbar subplot(1,2,1),imshow(f)
2.edge函数用于提取图像的边缘,radon函数用来计算指定方向上图像矩阵的投影
% 2.edge函数用于提取图像的边缘,radon函数用来计算指定方向上图像矩阵的投影 RGB=imread(\'drum.bmp\'); I=rgb2gray(RGB); BW=edge(I) figure,imshow(BW) theta=0:179; %角度从1取到179,这样randon就得到了不同角度下的径向上的图像场强值,即R矩阵。 [R,xp]=radon(BW,theta); %图像矩阵的投影 %R是点的数量的多少,xp是对应的坐标位置,xp只是对应的角度,跟theta一样 figure,imagesc(theta,xp,R);colormap(hot); xlabel(\'\theta(degrees)\'); %对x轴加标题 ylabel(\'x\prime\'); %对y轴加标题 title(\'R_{\theta}(x\prime)\'); %对图像加标题 colorbar %颜色映射