冈萨雷斯数字图像处理-数字图像基础(Matlab)-图像的空间操作(一)

图片的基础知识诸如视觉感知要素、光和电磁波谱以及图像的感知和获取和图像的取样和量化等这里不再说明。这里主要是对一些图像的基本操作及相关Matlab代码进行讲解。

数字图像表示

前面在开篇中讲到,图像可以看作是一个二维函数。即z=f(x,y)形式。如下图所示。


这里,我们首先尝试利用Matlab获取该图片。这里的imread函数表示读取图像。由于图像为RGB三原色表示,因此这里data维度为三维,这里data长度为123X125X3,数据格式为uint8;也就是说每个像素的取值范围为[0,255]。然后通过imshow展示该图片

clear
clc
data=imread('图2-18字母D.png');
imshow(data);


接下来,利用rgb2gray()将图像灰度化,并利用meshgrid和mesh三维展示。如下图所示。

gdata=rgb2gray(data);
[m,n]=size(gdata);
x=1:m;
y=1:n;
[X,Y]=meshgrid(x,y);
Z=gdata';
figure(2)
mesh(X,Y,Z)

图像的相加

图像的相加用于图像融合、图像增强、去噪等场合。这里取两张大小相同的图片进行相加处理。

clear
clc
light=imread('钨丝灯.jpg');  %读取图像数据
shadow=imread('阴影2.jpg');  %阴影图片
light_gray=rgb2gray(light);  %灰度化
shadow_gray=rgb2gray(shadow);
figure(1)                    %画出灰度化的图片
subplot(1,2,1)
imshow(light_gray);
title('钨丝灯')
subplot(1,2,2)
imshow(shadow_gray);
title('阴影')

注意,由于图像的灰度值范围为[0,255],如果直接相加,会超过这一范围,所以应当先将数值类型转化为double型,求和后,再变化为[0,255]范围内,然后数值转化为uint8型。这里采用线性变换:image_add_adjust=floor((image_add-image_add_min)/(image_add_max-image_add_min)*255);这里的floor函数表示取最大整数。

light_gray=double(light_gray);  %转化数值为double型
shadow_gray=double(shadow_gray);
image_add=light_gray+shadow_gray;

image_add_min=min(min(image_add));  %求取求和后最小值
image_add_max=max(max(image_add));  %求取求和后最大值

%将求和后的值变换到[0,255]
image_add_adjust=(image_add-image_add_min)/(image_add_max-image_add_min)*255;
%格式转化为uint8
image_add_adjust =uint8(image_add_adjust);

figure(2)
imshow(image_add_adjust)

图像的相减

图像相减可以直接增强图片的差别。这里以一条道路的图片为例展示图片相减。首先读取数据并取其灰度值。

clear
clc
data=imread('道路.jpg');  %读取图像数据
figure(1)
subplot(1,2,1)
imshow(data);
gdata=rgb2gray(data);  %灰度化
title('原图像')
subplot(1,2,2)
imshow(gdata);    %灰度图像
title('灰度图像')

然后将小于50的灰度值设置为0,并将原灰度图像与该图像做差。这里面体现了一些道路中的细节。

gdata2=gdata;
gdata2(gdata2<50)=0;
figure(2)
subplot(1,3,1)
imshow(gdata);    %灰度图像
title('灰度图像')
subplot(1,3,2)
imshow(gdata2);    %灰度图像
title('小于50置0的图像')
subplot(1,3,3)
imshow(gdata-gdata2);    %灰度图像
title('做差后的图像')


最后将原图像与做差后的图像相加,达到增强路面细节的效果。可以看到增强后的路面比原路面有了更多的细节体现。

figure(3)
subplot(1,3,1)
imshow(gdata);    %灰度图像
title('灰度图像')
subplot(1,3,2)
imshow(gdata2);    %灰度图像
title('小于50置0的图像')
subplot(1,3,3)
imshow(gdata-gdata2+gdata);    %灰度图像
title('增强路面的图像')

猜你喜欢

转载自blog.csdn.net/u010936286/article/details/80031153