C语言图像处理报告.docx
《C语言图像处理报告.docx》由会员分享,可在线阅读,更多相关《C语言图像处理报告.docx(15页珍藏版)》请在冰豆网上搜索。
![C语言图像处理报告.docx](https://file1.bdocx.com/fileroot1/2023-3/30/a2468e98-ab17-4616-829b-55260df1ffb4/a2468e98-ab17-4616-829b-55260df1ffb41.gif)
C语言图像处理报告
实验(实训报告)
课程名称智能信息处理
实验(实训)名称
班级组别姓名
同组者
实验(实训)日期完成日期
本实验(实训)所用学时统计
预习实验(实训)报告总计
评阅意见:
成绩
一、实验目的
1、熟悉MATLAB的基本使用;
2、掌握图像的基本知识及基本处理技能;
3、掌握直方图均衡化的实现方法;
4、掌握图像空域滤波基本技术。
二、实验内容
1、图像类型的转换;
2、图像的显示;
3、图像的算术运算与几何运算;
4、图像直方图均衡化;
5、图像空域滤波。
三、实验步骤与结果
1、不同类型图像的转换
(1)用gray2ind函数将一幅灰度图像转换成索引图像,128个灰度级,并与原图进行对比显示
I=imread('fw.bmp');
[I1,map1]=gray2ind(I,128);
subplot(1,2,1);imshow(I1,map1);
subplot(1,2,2);imshow(I);
图一
(2)用ind2gray函数将索引一幅图像转换成灰度图像,并与原图进行对比显示
>>I=imread('fw.bmp');
[I1,map]=gray2ind(I,64);
I2=ind2gray(I1,map);
>>subplot(1,2,1);imshow(I1,map);
>>subplot(1,2,2);imshow(I2,map1);
图二
(3)用ind2rgb函数将一幅索引图像转换成真彩色图像,并与原图进行对比显示
>>loadtrees
I=ind2rgb(X,map);
>>subplot(1,2,1);imshow(X,map);
>>subplot(1,2,2);imshow(I);
图三
(4)用mat2gray函数按指定区间(可自行指定)将数据矩阵转换成一幅灰度图像,并与原图进行对比显示
>>I=imread('fw.jpg');
>>I1=filter2(fspecial('sobel'),I);
>>I2=mat2gray(I1);
>>subplot(1,2,1);imshow(I);
>>subplot(1,2,2);imshow(I2);
图四
(5)用grayslice函数通过阈值(自行设定)将一幅灰度图像转换成索引图像,并与原图进行对比显示
>>I=imread('fw.jpg');
>>I1=grayslice(I,100);
>>subplot(1,2,1);imshow(I);
>>subplot(1,2,2);imshow(I1);
图五
(6)用rgb2gray函数将一幅真彩色图像转换成灰度图像,并与原图进行对比显示
>>I=imread('fw1.jpg');
>>I1=rgb2gray(I);
>>subplot(1,2,1);imshow(I);
>>subplot(1,2,2);imshow(I1);
图六
(7)用rgb2gray函数将一幅真彩色图像转换成索引色图像,并与原图进行对比
>>I=imread('fw1.jpg');
>>[X,map]=rgb2ind(I,64);
>>subplot(1,2,1);imshow(I);
>>subplot(1,2,2);imshow(X,map);
2、图像的算术运算
(1)用imadd函数将两幅图像相加,并与原图进行对比显示
!
相加的图必须像素相等
I=imread('back.bmp');
J=imread('love.jpg');
K=imadd(I,J);
subplot(1,3,1);imshow(I);
>>subplot(1,3,2);imshow(J);
>>subplot(1,3,3);imshow(K);
(2)用imadd函数将图像与常数相加,并与原图进行对比显示
>>I=imread('fw1.jpg');
>>J=imadd(I,100);
>>subplot(1,2,1);imshow(I);
>>subplot(1,2,2);imshow(J);
(3)用imsubtract函数将两幅图像相减,并与原图进行对比显示
>>I=imread('hy.jpg');
>>J=imread('back.jpg');
>>K=imsubtract(I,J);
>>subplot(1,3,1);imshow(I);
>>subplot(1,3,2);imshow(J);
>>subplot(1,3,3);imshow(K);
(4)用imsubtract函数将图像与常数相减,并与原图进行对比显示
>>I=imread('hy.jpg');
>>B=imopen(I,strel('disk',20));
>>I2=imsubtract(I,B);
>>subplot(1,2,1),imshow(I);
>>subplot(1,2,2),imshow(I2);
3、图像的几何运算
(1)用imresize函数改变一幅图像的大小,并与原图进行对比显示
>>X=imread('bb.jpg');
>>subplot(2,2,1);imshow(X);
>>X1=imresize(X,2,'nearest');
>>subplot(2,2,2),imshow(X1,[]);
>>X2=imresize(X,2,'bilinear');
>>subplot(2,2,3),imshow(X2,[]);
>>X3=imresize(X,2,'bicubic');
>>subplot(2,2,4),imshow(X3,[]);
(2)用imrotate函数将一幅图像旋转45度,并与原图进行对比显示
>>I=imread('bb.jpg');
>>J=imrotate(I,45,'bilinear');
>>subplot(1,2,1),imshow(I);
>>subplot(1,2,2),imshow(J);
(3)用imcrop函数裁剪一幅图像,并与原图进行对比显示
>>I=imread('bb.jpg');
>>I1=imcrop(I,[5,5,300,200]);
>>subplot(1,2,1),imshow(I);
>>subplot(1,2,2),imshow(I1);
4、图像直方图均衡化
选择一幅图像,用subplot、plot、imhist、cumtrapz等函数,对其进行直方图均衡化,并将原图像、其直方图,转换函数,以及均衡化后的直方图,以子图的形式,在一幅图中显示出来
>I=imread('bb.jpg');subplot(2,2,1);imshow(I);PS=rgb2gray(I);
[m,n]=size(I);GP=zeros(1,256);
fork=0:
255
GP(k+1)=length(find(I==k))/(m*n);
end
subplot(2,2,2);bar(0:
255,GP,'g');
>>N=zeros(1,256);
>>fori=1:
256
forj=1:
i
N(i)=GP(j)+N(i);
end
end
>>S2=round((N*256)+0.5);
>>fori=1:
256
GPeq(i)=sum(GP(find(S2==i)));
end
>>subplot(2,2,3);bar(0:
255,GPeq,'b')X=PS;
>>fori=0:
255
X(find(PS==i))=S2(i+1);
end
>>subplot(2,2,4);imshow(X);
5、图像空域滤波
(1)用邻域平均模板,利用函数fspecial,对一幅分别进行平滑处理(即低通滤波),再用subplot函数以子图形式,将处理前后的图像显示出来。
>>x=imread('bb.jpg');
h=fspecial('laplacian')
y=imfilter(x,h);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
h=
0.16670.66670.1667
0.6667-3.33330.6667
0.16670.66670.1667
(2)用高斯低通(gaussian)模板,利用函数fspecial,对一幅分别进行平滑处理,再用subplot函数以子图形式,将处理前后的图像显示出来。
四、实验体会:
在学习MATLAB的过程中,我感到首先要先熟悉一些命令的格式,然后亲自去打出一
些代码才能起到熟练的作用,然后就要多找例子,细细看明白,并且要做到能举一反
三。
最后要对大段代码读懂大概意思,然后再去认真推敲,完成作业。