您的位置:首页 > 编程语言 > MATLAB

MATLAB数字图像的初步处理2

2020-07-16 06:00 645 查看

实验二:MATLAB的4连通和8连通、减采样方法和灰度级变换

超级超级详细!!一起学习MATLAB的基础知识~~
所有的代码和素材之后我都会上传,都是免费的,大家可以自行参考。

MATLAB的4连通和8连通

什么像素是4连通呢,就是位于坐标(x,y)的一个像素P有4个水平和垂直的相邻像素,它们的坐标分别是(x+1,y),(x-1,y),(x,y-1),(x,y+1)。
如图,这就是像素的四连通:

这个像素集称为P的4邻域,用N4§表示。每个像素距(x,y)一个单位距离,如果(x,y)位于图像的边界,则p的某一邻像素位于数字图像的外部。

P的4个对角邻像素有如下坐标(x+1,y+1),(x+1,y-1),(x-1,y-1),(x-1,y+1) 。

这个像素集用Nd§表示,每个像素距(x,y)一个单位距离。

N4§+Nd§=N8§,N8§称为点P的八邻域,如果(x,y)位于图像的边界,则Nd§和N8§中的某些点落入图像的补边。

如何确定两个像素是否连通?

确定他们的灰度值是否满足相似性的准则,他们是否相邻,就像在二值图像中,两个像素很可能是4邻接的,但是要他们的灰度值相同才可以说明是连通的。

试求一个图的八连通和四连通,并且观察他们的分别

BW=[ 1 0 0 1 0 ; 0 1 1 1 0 ; 0 1 0 0 1 ; 0 0 0 1 1 ]
X=bwlabel(BW,4)。
Y=bwlabel(BW,8)
显示的结果就是

以上的显示结果表示四连通区域或四邻域,是指对应像素位置的上、下、左、右,是紧邻的位置。八连通区域或八邻域,是指对应位置的上、下、左、右、左上、右上、左下、右下,是紧邻的位置和斜向相邻的位置,四连通是八连通的子集,也就是说在图像处理中四连通的区域,一定是八连通。

MATLAB的减采样方法

什么是采样呢,采样就是把一个连续的图像,分成二维空间的一个个点,我们要用若干个点来表示这一幅图像,采样结果质量的高低就是分辨率。

对图像分别进行4和16倍减采样,查看减采样的效果

一倍采样:

a=imread(‘xiongda.jpg’);
b=rgb2gray(a);
[X,Y]=size(b);g=zeros(X,Y);
i=1;j=1;
for i1=1:1:X
for j1=1:1:Y
g(i,j)=a(i1,j1);
j=j+1;
end
j=1;
i=i+1;
end
subplot(221),imshow(uint8(g));

二倍减采样:

a=imread(‘xiongda.jpg’);
b=rgb2gray(a);
[X,Y]=size(b);g=zeros(X,Y);
i=1;j=1;
for i1=1:1:X
for j1=1:2:Y
g(i,j)=a(i1,j1);
j=j+1;
end
j=1;
i=i+1;
end
subplot(222),imshow(uint8(g));

四倍减采样:

a=imread(‘xiongda.jpg’);
b=rgb2gray(a);
[X,Y]=size(b);g=zeros(X,Y);
i=1;j=1;
for i1=1:2:X
for j1=1:2:Y
g(i,j)=a(i1,j1);
j=j+1;
end
j=1;
i=i+1;
end
subplot(223),imshow(uint8(g));

十六倍减采样:

a=imread(‘xiongda.jpg’);
b=rgb2gray(a);
[X,Y]=size(b);g=zeros(X,Y);
i=1;j=1;
for i1=1:4:X
for j1=1:4:Y
g(i,j)=a(i1,j1);
j=j+1;
end
j=1;
i=i+1;
end
subplot(224),imshow(uint8(g));

查看效果图:

可见减采样倍数越高,图像越小。

另:subplot函数的用法,subplot(x,y,z) 其中x表示行,y表示列,z表示图像在行列中,从左往右,从上往下的第几个位置,xyz可以不用逗号隔开,例如上面的subplot(221)就是两行两列第一个的意思,222就是第二个,223就是第三个。

MATLAB的灰度级变换

将一副图像转换成256灰度值,64级灰度值,16级灰度值,4级灰度值

a=imread(‘xiongda.jpg’);
b=rgb2gray(a);
[X,Y]=size(b);
g=zeros(X,Y);
for i=1:X
for j=1:Y
g(i,j)=floor(b(i,j));
end
end
subplot(221)
imshow(uint8(g)) %256

for i=1:X
for j=1:Y
g(i,j)=floor(b(i,j)/4);
end
end
subplot(222)
imshow(uint8(g)) %64

for i=1:X
for j=1:Y
g(i,j)=floor(b(i,j)/16);
end
end
subplot(223)
imshow(uint8(g)) %16

for i=1:X
for j=1:Y
g(i,j)=floor(b(i,j)/64);
end
end
subplot(224)
imshow(uint8(g)) %4

看看效果:

我们可以得到一个结论,灰度级越低,图像越黑。

以上就是实验二MATLAB的4连通和8连通、减采样方法和灰度级变换

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: