文章目录
前言
本次图像处理是以matlab为处理工具开展的。仅说明图像处理的作用,一些图像处理的基本操作,实现原理和实现过程进行阐述。首先是进行图像的读取、存储和显示等。
一、实验目的
1、如何利用 MATLAB 来获取图像的大小、颜色、高度、宽度等等相关信息。
2、在 MATLAB 中如何读取图像
二、实现原理
一幅RGB图像就是彩色像素的一个M×N×3数组,其中每一个彩色相似点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。按照惯例,形成一幅RGB彩色图像的三个图像常称为红、绿或蓝分量图像。
因此在处理图像之前,要先提取图片信息,其信息不仅仅存在于宽度高度,颜色分量也是十分重要的。灰度化算法(这里不阐述说明什么是灰度化)
灰度化一般有三种处理方式,(1)分量法:将R、G、B其中的一个分量的大小作为该像素点的灰度大小,根据需要选择其中一种使用。
(2)最大值法:将R、G、B的大小都取3个值中的最大值
(3)平均值法:取R、G、B三个值的平均大小
(4)加权平均法:取R、G、B三个值的加权平均大小
三、算法设计
本次实验的图片如下:
3.1利用imread( )函数读取图像
image=imread('shiyan.jpg');%读取图像
imshow(image);%显示图像
图像进行了读取后对图像进行了显示,观察matlab工作区,图像为440x820x3 uint8型。
3.2 分别显示图像的红、绿和蓝色分量的强度
RGB = imread('shiyan.jpg');%读取图片并命名
subplot(2,2,1),imshow(RGB(:,:,1)),title('R分量');%读取R分量并显示
subplot(2,2,2),imshow(RGB(:,:,2)),title('G分量');%读取G分量并显示
subplot(2,2,3),imshow(RGB(:,:,3)),title('B分量');%读取B分量并显示
subplot(2,2,4),imshow(RGB),title('RGB');%显示原图
3.3 将图像转换为灰度图,显示灰度结果图像进行对比
a=imread('shiyan.jpg');%读取图像
[x,y,z]=size(a); %得到原来图像的矩阵的参数
imagemax=ones(x,y); %初始化最大化灰度图像为全1矩阵
for i=1:x
for j=1:y
imagemax(i,j)=max(a(i,j,:));
end
end %取最大值
a(:,:,1)=imagemax;
a(:,:,2)=imagemax;
a(:,:,3)=imagemax;%赋最大值
[c1,c2,c3]=size(a);%读取数据
b=zeros(c1,c2);%创建全0矩阵
b=uint8(b);%定义类型
for i=1:c1
for j=1:c2
sum=0;
for k=1:c3
sum=sum+a(i,j,k)/3;%取平均
end
b(i,j)=sum;%将平均值赋值给b
end
end
figure(1);
subplot(2,2,1),imshow(a),title('原图');
subplot(2,2,2),imshow(b),title('平均值灰度图');
subplot(2,2,3),imshow(a);title('最大值灰度图')
此处不太明显,但仔细观察可看出,在取最大值之后,图像灰度明显更加亮,既对比度更高,而取平均值趋于中等。
3.4根据图像特征设计灰度变化曲线,实现灰度拉伸算法,显示拉伸前后图像对比图并进行分析。
四、灰度拉伸理论补充
灰度拉伸又叫对比度拉伸,它是一种常见的灰度值线性变换,即使用线性函数对灰度值不同等级的灰度区域进行分段调节。
灰度拉伸的主要目的是提高图像处理时灰度值的大小区间,使得原图像的灰度值大小扩充至整个灰度级别的区间内,即0至255之间。
车辆图像灰度拉伸是指依照车辆灰色图像的灰度直方图的灰度分布将整个车辆图像的灰度值进行调整,使调整后的车辆灰度值区间扩大到0至255。
例:图片中部分像素点的灰度值未达到255,假设灰度范围为0-150,此时我进行灰度拉伸,将150认为是255,进行一个缩放。
但是直接线性缩放和原图相差无几,是没有意义的,此时进行分段区间进行缩放,能够提高对比度。我可以将140-150部分进行一个线性缩放,60-140再进行一个比例的缩放,最后0-60进行一个缩放。
此处若是不太明晰,可以加我QQ:2745498610进行探讨。
代码实现:
image=imread('shiyan.jpg'); %导入图像
im=rgb2gray(image); %图像灰度化
image=im2double(image); %将图像转为double型
[n,m]=size(im); %将图像矩阵化
x=1;y=1;
a=60;b=165;c=90;d=210; %设置期望灰度区间a-b;c-d
j=[0,a,b,255];k=[0,c,d,255];
figure(1);plot(j,k); %输出期望区间的折线图形
for x=1:n
for y=1:m
if(im(x,y)<=a)
imagebh(x,y)=im(x,y)*(c/a);
elseif(im(x,y)>a&&im(x,y)<=b)
imagebh(x,y)=((d-c)/(b-a))*[im(x,y)-a]+c;
else(im(x,y)>b);
imagebh(x,y)=((255-d)/(255-b))*[im(x,y)-b]+d;
end
end
end %两个嵌套的for循环进行x,y的矩阵参数筛选
figure(2);
subplot(121);
imshow(im); %输出原图
title('原图')
subplot(122);
imshow(imagebh); %输出变换的图像
title('变换后图像');
参数可根据图片对比度需要自行修改
由代码的a,b,c,d区间取值可得figure1的分段线性变换折线关系,从中可得,当我们在取得一定的区间以后,可以使得灰度图像在进行灰度图像拉伸以后,可以突出一部分的色彩对比度,从而实现图像的部分质量增强。在多次调试选定之后,最终将区间选择在了(60,165),(90,210)