matlab 区域识别,性能 – MATLAB识别3D图像中的邻接区域

本文提出了一种结合Divakar和teng答案的改进方案,实现了2D和3D图像中独立区域的有效处理。该方法通过预分配和图像平移提高了处理速度,在3D图像上实现了0.79秒的处理时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我提出了一个解决方案,它结合了

Divakar和

teng的答案,以及我自己的修改,并将其推广到2D或3D案例.

为了提高效率,我应该预先分配r和c,但在此期间,这是运行时:

>对于尺寸为117x159x126和32000个独立区域的3D图像:0.79秒

>对于上面的2D示例:使用此解决方案为0.004671s,使用Divakar解决方案为0.002136s,使用teng解决方案为0.03995s.

不过,我没有尝试将获胜者(Divakar)扩展到3D案例!

noDims = length(size(Im));

validim = ones(size(Im))>0;

labels = unique(Im);

if noDims == 3

Im = padarray(Im,[1 1 1],'replicate', 'post');

shifts = {[-1 0 0] [0 -1 0] [0 0 -1]};

elseif noDims == 2

Im = padarray(Im,[1 1],'replicate', 'post');

shifts = {[-1 0] [0 -1]};

end

% get value of the neighbors for each pixel

% by shifting the image in each direction

r=[]; c=[];

for i = 1:numel(shifts)

tmp = circshift(Im,shifts{i});

r = [r ; Im(validim)];

c = [c ; tmp(validim)];

end

A = sparse(r,c,ones(size(r)), numel(labels), numel(labels) );

% make symmetric, delete diagonal

A = (A+A')>0;

A(1:size(A,1)+1:end)=0;

谢谢您的帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值