一、图像文件的读写
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(' heta(degrees)'); %对x轴加标题
ylabel('xprime'); %对y轴加标题
title('R_{ heta}(xprime)'); %对图像加标题
colorbar %颜色映射