某个像素点连通情况的判断

某个像素点连通情况的判断

背景:已获得血管分割二值图像的骨架图像,判断某个像素点代表了血管的端点、内部点、分叉点,还是交叉点。
1、取出需要判断点的八邻域并编号:
在这里插入图片描述
这里采用顺时针编号。
2、计算下面的表达式:
对于像素点的连通数的计算方法为:
I n ( x , y ) = 0.5 ( ∑ i = 1 8 ∣ N i ( x , y ) − N i + 1 ( x , y ) ∣ ) In(x,y) = 0.5(\sum_{i=1}^{8}|N_{i}(x,y)-N_{i+1}(x,y)|) In(x,y)=0.5(i=18Ni(x,y)Ni+1(x,y))
N(x,y)为对应编号像素取值(0或1)。

个人理解:相同区域内的像素值一样,相减为0,不会增加计算式的值;而跨区域了,则相减为1,且一个区域会分别在起始和结束产生这样的变化,所以除以0.5。

3、确定该像素点的属性
连通数为1:端点;
连通数为2:内部点;
连通数为3:分叉点;
连通数为4:交叉点。

Matlab代码:对整幅图像进行连通性标记,默认边缘为0连通。

% 为图像的细化点进行标记,0--其他;1--端点;2--内部点;3--分叉点;4--交叉点 
function labelimg = LabelPoints(imgxi)
labelimg = zeros(size(imgxi));   % 基本上最外围数据不会有血管,最外面一层可以设置为0
position_x = [-1 0 1 1 1 0 -1 -1 -1];  % 从左上角开始顺时针进行,x为水平,左上角为(00)
position_y = [-1 -1 -1 0 1 1 1 0 -1];  %
[rnum,cnum] = size(imgxi);
for j = 2:1:cnum-1  % x
    for i=2:1:rnum-1  % y
        if(imgxi(i,j)==0)  % 非细化点
            continue;
        end
        I = 0;
        for p = 1:1:8
            % 肯定有八邻域,就不判断了
            I = I + abs(imgxi(i+position_y(p+1),j+position_x(p+1))-imgxi(i+position_y(p),j+position_x(p)));
        end
        I = floor(I/2);
        labelimg(i,j) = I;
    end
end
end

参考文献:Fraz M M, Remagnino P, Hoppe A , et al. Quantification of blood vessel calibre in retinal images of multi-ethnic school children using a model based approach. Comput Med Imaging Graph, 2013, 37(1): 48~60.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值