首页 > 技术文章 > 数字图像处理及MATLAB实现实验一

zhying99 2019-03-21 09:21 原文

一、图像文件的读写

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  %颜色映射

 

 

推荐阅读