您的位置:首页 > 其它

机器视觉学习笔记--二值图像处理

2017-03-26 21:35 260 查看

基本理论

二值图像只有1和0两级灰度

节省内存、快速处理、许多灰度图像的特征以二值形式出现,如边缘,轮廓灯

4邻点



八邻点



像素路径

从像素[i,j]到[m,n]之间由邻点连接的路径,4连通为4路径,8连通为8路径。

连通性

如果存在一条从像素p到像素q的路径,则称p与q是连通的。

连通部件:一个像素集合,如果集合内每一个像素都与集合内其他像素连通,则称该集合为一个连通部件

二值图像的几何属性

大小/面积:A

位置:(x,y)position二值图像区域的中心

方向:l,部件上所有像素到该直线的距离的平方和最小

边界:L,区域边缘像素的集合

周长:P,边缘像素长度;分界线长度

紧密性:C=P*P/A

二值图像的处理

阈值化(Threshholding):将灰度图转化为二值图像

img=imread('test.jpg') %读取图像
imshow(img) %显示图像
BW=im2bw(img,0.5) %图像二值化,0.5为阈值
imshow(BW) %显示二值化结果


行程编码(Run-length encode):表达二值图像的一种紧凑方式



方法一:只编码1,记录每行1出现的位置区间

如上图所示的二值图像可以表示为:

(1,3), (7,2), (12,4), (17,2), (20,3)

(5,13), (19,4)

(1,3), (17,6)

方法二:分别按顺序记录1,0出现的个数,第一个数字为1出现的次数。

上图可以表示为:

3, 3, 2, 3, 4, 1, 2, 1, 3;

0, 4 ,13 ,1, 4;

3, 13, 6

边界跟踪:以一定的顺序跟踪一个区域的边缘素

聚类/连通部件记

BW=[1     1     1     0     0     0     0     0
1     1     1     0     1     1     0     0
1     1     1     0     1     1     0     0
1     1     1     0     0     0     1     0
1     1     1     0     0     0     1     0
1     1     1     0     0     0     1     0
1     1     1     0     0     1     1     0
1     1     1     0     0     0     0     0 ];
L = bwlabel(BW,4)%4是4连通


结果如下:

ans =

1     1     1     0     0     0     0     0
1     1     1     0     2     2     0     0
1     1     1     0     2     2     0     0
1     1     1     0     0     0     3     0
1     1     1     0     0     0     3     0
1     1     1     0     0     0     3     0
1     1     1     0     0     3     3     0
1     1     1     0     0     0     0     0


可以把二值图像区域缩成线条,以逼近区域的中心线,也称之为骨



实现代码如下(细化代码参考源):

clear;close all;
img = imread('thin.png');
BW = ~im2bw(img,0.80);
figure('name','thin');
subplot(121);
imshow(BW);
BW2 = bwmorph(BW,'thin',100);%100表示算法迭代次数。
subplot(122);
imshow(BW2);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息