圖像細化(骨架化)算法 分析

http://www.cnblogs.com/blue-lg/archive/2012/03/08/2383955.html

圖像的細化是模式識別中很重要的一個技術,指的是將原本"臃腫"的像素簡化為單像素相連接的二值圖像(即類似骨架的概念),細化的好壞直接影響到後面識別匹配的效率。

摘自某文章的話,細化就是經過一層層的剝離,從原來的圖中去掉一些點,但仍要保持原來的形狀,直到得到圖像的骨架。骨架,可以理解為圖象的中軸,例如一個長方形的骨架是它的長方向上的中軸線;正方形的骨架是它的中心點;圓的骨架是它的圓心,直線的骨架是它自身,孤立點的骨架也是自身。

 

下面先介紹經典的Zhang並行快速細化算法:

設p1點的八鄰域為:

      【    p9    p2     p3

             p8    p1     p4

                  p7    p6     p5 】

(其中p1為白點,如果以下四個條件同時滿足,則刪除p1,即令p1=0)

其中迭代分為兩個子過程:

     過程1 細化刪除條件為:        (1)、2 < =N(p1) <= 6,   N(x)為x的8鄰域中黑點的數目

                                           (2)、A(p1)=1,    A(x)指的是將p2-p8之間按序前後分別為0、1的對數(背景色:0

                                           (3)、p2*p4*p6=0            

                                           (4)、p4*p6*p8=0

           如果同時滿足以上四個條件則該點可以刪除(賦值為0)。

    過程2 細化刪除條件為:        (1)、2 < =N(p1) <= 6,   N(x)為x的8鄰域中黑點的數目

                                           (2)、A(p1)=1,    A(x)指的是將p2-p8之間按序前後分別為0、1的對數(背景色:0

                                           (3)、p2*p4*p8=0            

                                           (4)、p2*p6*p8=0

           如果同時滿足以上四個條件則該點可以刪除。

代碼如下:

A.m

复制代码
1 function n=A(temp,i,j)
2 %0->1的數目
3 shuzu=[temp(i,j),temp(i-1,j),temp(i-1,j+1),temp(i,j+1),temp(i+1,j+1),temp(i+1,j),temp(i+1,j-1),temp(i,j-1),temp(i-1,j-1)];
4 n=0;
5 for i=2:8
6 if shuzu(i)==0&&shuzu(i+1)==1
7 n=n+1;
8 end
9 end
复制代码

主函數代碼:

复制代码
 1 test=input('Please input a digits image:','s'); %輸入圖像
2 x=imread(test);
3 if ~isbw(x)
4 '請確保輸入圖像為二值化圖像!';
5 else
6 [height,width]=size(x);
7 mark=1;
8 % temp=zeros(height+2,width+2);
9 % temp(2:height+1,2:width+1)=x(:,:);
10 temp=x;
11 imshow(temp);
12 while mark==1
13 mark=0;
14
15 for i=2:height-1
16 for j=2:width-1
17 condition=0;
18 %判斷P(r,c)是否為可細化像素
19 if temp(i,j)==1
20 n=0;
21 for ii=-1:1
22 for jj=-1:1
23 n=n+temp(i+ii,j+jj);
24 end
25 end
26 if (n>=3 && n<=7)
27 condition=condition+1;
28 end
29 if A(temp,i,j)==1
30 condition=condition+1;
31 end
32 if temp(i-1,j)*temp(i,j+1)*temp(i+1,j)==0
33 condition=condition+1;
34 end
35 if temp(i,j+1)*temp(i+1,j)*temp(i,j-1)==0
36 condition=condition+1;
37 end
38 if condition==4
39 mark=1;
40 temp(i,j)=0;
41 end
42 end
43 end
44 end
45 figure;imshow(temp);
46
47
48 for i=2:height-1
49 for j=2:width-1
50 condition=0;
51 %判斷P(r,c)是否為可細化像素
52 if temp(i,j)==1
53 n=0;
54 for ii=-1:1
55 for jj=-1:1
56 n=n+temp(i+ii,j+jj);
57 end
58 end
59 if (n>=3 && n<=7)
60 condition=condition+1;
61 end
62 if A(temp,i,j)==1
63 condition=condition+1;
64 end
65 if temp(i-1,j)*temp(i,j+1)*temp(i,j-1)==0
66 condition=condition+1;
67 end
68 if temp(i,j-1)*temp(i+1,j)*temp(i,j-1)==0
69 condition=condition+1;
70 end
71 if condition==4
72 mark=1;
73 temp(i,j)=0;
74 end
75 end
76 end
77 end
78 figure;imshow(temp);
79 end
80 end
复制代码

結果:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于ITK的医学图像3D骨架提取算法是一种利用开源图像处理工具包Insight Segmentation and Registration Toolkit (ITK) 对医学图像进行处理,提取出骨骼结构的算法。 该算法的基本思想是通过对医学图像进行预处理,如滤波、分割等,将图像中的骨骼结构区域提取出来。然后使用骨骼提取方法,将骨骼结构从非骨骼结构中分离出来,得到骨骼的二值图像。 在ITK中,可以使用一些滤波算法来对医学图像进行预处理,例如高斯滤波、中值滤波等,以降低噪声影响。然后,可以使用图像分割算法将骨骼结构区域与其他组织结构分开,例如基于阈值的分割或者基于边缘的分割。 提取出骨骼结构的二值图像后,可以使用骨骼提取算法骨架提取出来。骨骼提取算法通常基于骨骼像素的连通性或几何形状特征进行选择。常见的骨骼提取算法包括细算法、距离变换算法和形态学骨架提取算法等。 细算法通过迭代操作将二值图像中的骨骼像素细为单像素的线条,实现骨架提取。距离变换算法基于骨骼像素到背景像素的最短距离,提取出骨架。形态学骨架提取算法通过一系列形态学操作,提取出骨架。 通过ITK中的这些处理步骤,可以有效地实现基于ITK的医学图像3D骨架提取算法。该算法可以帮助医学研究者从医学图像中提取出骨骼结构信息,提供辅助医学诊断和治疗的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值