Matlab数字图像处理(一)——数字图像处理的基本操作

RGB图像的基本操作

【代码】

I=imread('D:\lab1\RGB.jpg');%读入图像
Ig=rgb2gray(I);%将RGB图像转化为灰度值图像
threshold=graythresh(Ig);
bw=im2bw(Ig,128/256); %利用im2bw函数将灰度图转换为二值图像
BW=imbinarize(Ig, threshold);调用graythresh函数和imbinarize函数将图像转化为二值图像
subplot(2,2,1); imshow(Ig);%绘制图像
subplot(2,2,2); imhist(Ig); 
subplot(2,2,3); imshow(bw);
subplot(2,2,4); imshow(BW);

代码运行结果如下:

img

其中图一为将RGB图像转化为灰度图像后的结果,图二为该灰度图像的直方图,图三为按阈值选择128/2565转化得到的二值图,图四为调用graythresh函数找到一个比较合适的阈值后后分割得到的二值图。

Index图像的基本操作

【代码】

%%INDEX图像基本操作
[I,map]=imread("Index.gif");%读入索引图象
X=ind2gray(I,map);%将索引图像转化为灰度图像
threshold=graythresh(X);%获取阈值
BW=imbinarize(X,threshold);%将灰度图像转化为二值图像
subplot(2,2,1);imshow(X);%绘制图像
subplot(2,2,2);imshow(BW);
subplot(2,2,3);imhist(X);
subplot(2,2,4);imshow(I,map);

代码运行结果如下:

img

其中图一为将Index图像转化为灰度图像后的结果,图二为将该灰度图像转化为二值图后的结果,图三为该灰度图像的直方图,图四为原索引图像。

利用直方图对图片进行分割

对light.jpg图进行彩色图到灰度图的转化,并通过分析灰度化后图片的直方图,选取合适的阈值分离背景区域(区分出亮灯和黑暗的区域),生成二值图,并分析你所选取的这个阈值下,亮灯区域(白色区域)占整个地球面积的大概比例?

【代码】

%%利用直方图进行图像分割
L=imread("light.jpg");%读入图像
R=rgb2gray(L);
threshold=graythresh(R);%获取阈值
BW=imbinarize(R, threshold);
%计算白色像素所占比例
[m,n]=size(BW); %获取图像的长和宽。
total_point_count=m*n;  %计算图片中有多少个像素点
white_point_count=length(find(BW==1)); %计算白色的像素点的个数
area_precent=(white_point_count)/(total_point_count); %得到白色像素所占的比例

【结果】

得到的分割后的二值图

img

计算白色像素占总像素的比例,比例等于0.0322

【分析】

通过graythresh( )函数求得阈值为0.2275,此阈值是通过最大类间方差法找到图片的一个合适的阈值。

graythresh( )函数原理是:利用最大类间方差的基本思想按图像的灰度特性, 使用一个阈值将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。使得背景和目标之间的方差最大的阈值就是最佳的阈值。

调用格式:Threshold=graythresh(I)

这里Threshold为调用graythresh函数得到的灰度值阈值通过计算获得输入图像的阈值,这个阈值在[0,1]范围内。该阈值可以传递给im2bw完成灰度图像转换为二值图像的操作,可在变量中直接查看此值。

在0.2275阈值情况下,亮灯区域(白色区域)占整个地球面积大概比例为3.2233%,未亮灯区域(黑色区域)占整个地球面积大概比例96.7767%。

直方图均衡化

请利用帮助文件学习histeq函数,利用histeq函数对对比度不同的2幅图像(dark.jpg和low_contrast.jpg)进行直方图均衡化。对比直方图均衡化后两幅图像的效果,及其直方图的变化,并分析原因。(附代码,结果,分析)

【代码】

%%直方图均衡化
Low=imread("low_contrast.jpg");%读入low_contrast图像
Low_histeq=histeq(Low);%直接调用histeq函数进行直方图均衡化
subplot(2,2,1);imshow(Low);
subplot(2,2,2);imshow(Low_histeq);
subplot(2,2,3);imhist(Low);
subplot(2,2,4);imhist(Low_histeq);
D=imread("dark.jpg");%读入dark图像
D_histeq=histeq(D);
subplot(2,2,1);imshow(D);
subplot(2,2,2);imshow(D_histeq);
subplot(2,2,3);imhist(D);
subplot(2,2,4);imhist(D_histeq);

代码运行结果:

img

图一为low_contrast图像,图二为直方图均衡化后的图像,图三为low_contrast图像的直方图,图四为直方图均衡化后图像的直方图

img

图一为dark图像,图二为直方图均衡化后的图像,图三为dark图像的直方图,图四为直方图均衡化后图像的直方图

【分析】

图像及直方图的变化:

对于low_contrast图像而言,通过灰度直方图可知,low_contrast图像像素的灰度值主要集中在灰度值适中的区域,但是集中程度较为紧密,区分度小,所以图像整体有一种灰蒙蒙的感觉。直方图均衡化后,清晰度提高,像素之间的灰度值差异增加;从直方图上看,各个像素的灰度值在0-255之间分布均匀,拉大了各个像素之间的差异,增加了图像的清晰度。另外,均衡化后的图像亮度增加,从直方图上看,灰度高的部分的像素个数也增加了。

对于dark图像而言,整幅图像灰度值偏低,直方图的值也集中于较低的部分。而直方图均衡化后,首先图像的整体上亮度变亮,而且图像中的物体的边缘变得清晰;从灰度直方图上看,灰度值分布较均匀地分布于0-255之间,拉大了图像中像素的范围及像元之间的灰度值差异,尤其是在物体边界上,原图中物体和背景为灰色和黑色,有的地方区分不太明显,均衡化后为白色和黑色或者白色和灰色的组合,边界更加清晰。

posted @ 2022-04-21 23:40  Weltㅤ  阅读(1753)  评论(0编辑  收藏  举报