每天一点matlab——特征提取之欧拉数

欧拉数是拓扑学中的范畴,在搜索这个词的时候我发现包括百度百科在内的说明都没有说清楚。我的理解就是欧拉数定义为E,他表示一个图像区域中的孔数H和连接部分数C的差,即E=C-H;在这里孔数好理解,难理解的就是所谓的“连接部分数C”,我的理解就是图像中的有多少个单独连接的部分,而其中的每一个部分都是链接在一块的,如下面的字母A,他的连接数就是1.

使用bweuler函数可以计算出图像的欧拉数,但是有一个前提:二值图像的背景必须为0,目标必须为1

I1=imread('5-7(A).jpg');              % 图5-7(a)的欧拉数计算
BW1=im2bw(I1,0.7);                  % 图像二值化。原始图像虽然看起来向二值图像,实质为RGB图像。
figure,imshow(~BW1); 
E1=bweuler(~BW1,8)                  % 二值化后的图像,目标为0,背景为1,必须先求反后计算欧拉数。

 

Matlab中,欧拉是指图形的拓扑性质,可以通过以下函获取: 1. 欧拉eulernumber:这个函计算了给定图形的互联分量和孔洞之间的差异。具体来说,对于一个连通的二维图形,欧拉等于1减去孔洞的量。如果图形是二维网格,则欧拉等于1减去孔洞量和互连分量的量之和。 2. 图形的互联分量可以通过函bwconncomp计算得到。该函将图像看作是由互相连接的对象组成的,并返回对象(如连通域)的量。 3. 孔洞可以通过函bweuler计算得到。该函将图像看作是由白色和黑色像素组成的,并返回图像中孔洞的量。 综上所述,要计算图形的欧拉,首先需要使用bwconncomp函计算图形的互联分量,然后使用bweuler函计算图形的孔洞,最后使用欧拉eulernumber计算出欧拉。 以下是一个示例代码: ```matlab % 创建一个二值图像 image = [1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1]; % 计算图像的互联分量 conncomp = bwconncomp(image); numComponents = conncomp.NumObjects; % 计算图像的孔洞 numHoles = bweuler(image); % 计算图像的欧拉 eulerNumber = eulernumber(numComponents, numHoles); % 显示结果 disp(['互联分量:' num2str(numComponents)]); disp(['孔洞:' num2str(numHoles)]); disp(['欧拉:' num2str(eulerNumber)]); ``` 这段代码创建了一个6x7的二值图像,然后使用bwconncomp和bweuler函计算了互联分量和孔洞,最后使用eulernumber函计算了欧拉,并将结果显示在命令窗口中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值