距离变换是在一个二值图像中,计算这个图像中非零像素点到最近零像素点的距离,图像中的每个像素的灰度值为该像素与距离其最近的背景像素间的距离,距离背景像素点越远,像素值越大。是一个二值图像变为灰度图像的过程
欧式距离(Eudlidean Distance):
棋盘距离(Chessboard Distance):
街区距离(Cityblock Distance):
1、倒角距离变换
f(p)=min{f(p),Distance(p,q)+f(q)}
p代表当前中心像素位置,f(p)代表当前中心像素的像素值;q代表3X3模版周围像素的位置,f(q)代表像素值。D(p,q)两个像素位置的距离。
第一次扫描从左上角开始,从上到下,从左到右,依次计算中心像素p到像素1、2、3、4的距离,保存最小距离
1 2 3 4 p 6 7 8 9 d0=p(x,y)
d1=p(x-1,y-1)+distance((x,y),(x-1,y-1))
d2=p(x,y-1)+distance((x,y),(x,y-1))
d3=p(x+1,y-1)+distance((x,y),(x+1,y-1))
d4=p(x-1,y)+distance((x,y),(x-1,y))
p(x,y)=min{d0,d1,d2,d3,d4}
第二次扫描从右下角开始,从下到上,从右到左,依次计算中心像素p到像素9、8、7、6的距离,保存最小距离
1 2 3 4 p 6 7 8 9
d0=p(x,y)
d9=p(x+1,y+1)+distance((x,y),(x+1,y+1))
d8=p(x,y+1)+distance((x,y),(x,y+1))
d7=p(x-1,y+1)+distance((x,y),(x-1,y+1))
d6=p(x+1,y)+distance((x,y),(x+1,y))
p(x,y)=min{d0,d9,d8,d7,d6}
步骤:
(I)将图像二值化,前景为1,背景为0
(II)遍历图像时,先判断中心像素值是否为0,如果为0,直接跳过,移到下一个像素位置;如果不为0,按照上面的思想计算距离
2、一般距离变换
(I)将二值图像中目标像素点进行分类,分为内部点、边界点、孤立点,像素值为1的是目标像素点。
以4邻域为例,如果中心像素点的像素值为1,且它的四邻域像素值均为1,则该点为内部点;如果中心像素点的像素值为1,且它的四邻域像素值均为0,则该点为孤立点;除了内部点、孤立点之外,其余目标像素点都是边界点。
内部点 1 1 1 1 1
孤立点 0 0 1 0 0
(II)计算图像中所有的内部点和非内部点,点集分别为S1,S2。
(III)对于S1中的每一个内部点,使用距离公式,计算其与S2中每个边界点的最小距离,作为该点的像素值,这些最小距离构成集合S3。
(IV)计算S3中的最大最小值Max,Min。
(V)归一化每个内部点的像素值
P(x,y)=255*{[(S(x,y))-Min] / (Max-Min)}
(VI)孤立点保持不变