3D CTの流域を実行した後、特定の値より小さく、別のものより大きな粒子のみを選択します。しかし、最終的な出力として、私は連続するIDのみを含む行列が必要です。私の実装は以下の通りです:大きな行列で結果IDを得る最も効率的な方法
% Get unique IDs
grain_id = unique(L);
% Get rid of artefacts
% Compute histogram for each ID
% and compare volume numv with thresholds
% Reject grains smaller or larger than threshold
reject = grain_id(or(numv<vmin,numv>vmax));
% Keep 0s (boundaries) and 1 (voids)
reject = reject(3:end);
% Rejected become void
L(ismember(L,reject))=1;
% Get number of grains
grain_id = unique(L);
numgrains = numel(grain_id);
% Consecutive IDs
idx = false(size(L));
for i=1:numel(reject)
idx = L>reject(numel(reject)+1-i);
L = L-uint16(idx);
end
私は1226x1226x3600の行列を持っています。そのため、パフォーマンスは本当に重要です。 1つのループには約1秒かかる。 5秒。それは目標を達成するための最も効率的な方法ではない可能性が高いですが、現時点では私はより良いアイデアを持っていません。あなたは?
クール!答えがうれしかったのでうれしい。私はこれがあなたが探していたものかどうか確信が持てませんでしたが、それはそうだと思います! – rayryeng