WebHU - Programozási kérdések és válaszok

legrövidebb út a csontvázas 3d maszk mentén

Van egy 3D tömböm ívelt vonalakkal (vázas adatok), és meg kell találnom a legrövidebb összekötő utat ezeken a vonalakon lévő két pont között.

Hogyan találhatom meg a legrövidebb utat két pont között egy 3D-s csontváz tömb mentén a Matlabban?

Ott ezek több ember a> kérdezés a hasonló kérdés mindkettő itt és tovább a matematikai fórum. A legtöbb válasz azonban erre a blogbejegyzésre a legrövidebb utak megtalálásában, ami nem egy csontváz mentén keres. Ha megpróbálom a csontváz mentén erőltetni, akkor olyan utakat is visszaad, amelyek nem a két pont között vannak, hanem mindkettőtől távolabb. Néhány Matlab függvény is, amelyekről az emberek azt mondják, hogy csak 2D-s adatokat kezelhetnek (mint például a bwdistgeodesic, amely a nem csontváz voxelek elkerülésére használható).

használok két függvényeket a fájlcseréből. Íme, amit csinálok:

%get data
load mri
D = double(squeeze(D)); D = D./max(D(:)); D = real(ifft(ifft(ifft(ifftshift(ifftshift(ifftshift( padarray( fftshift(fftshift(fftshift(fft(fft(fft(D,[],1),[],2),[],3),1),2),3), size(D),0,'both' ) ,1),2),3),[],1),[],2),[],3));
figure; ax(1) = subplot(1,3,1); imshow(mean(D,3),[]); title('mean image')

%find vasculature
spacing = [1 1 1];sigmas = [0.5:0.5:2];tau = 1;whiteondark = false;Dvess = vesselness3D(D, sigmas, spacing, tau, whiteondark);
ax(2) = subplot(1,3,2); imshow(imfuse(squeeze(max(Dvess,[],3)), squeeze(max(Dvess>0.5,[],3))),[]); title('masked "vessels"')

%skeletonize
Dskel = Skeleton3D(Dvess>0.5);
ax(3) = subplot(1,3,3); imshow(imfuse(squeeze(max(Dskel,[],3)), squeeze(max(Dvess>0.5,[],3))),[]); title('skeletonized mask'); linkaxes(ax); zoom(2);

%select seeds
corline1 = imline(); idx1 = find(repmat(corline1.createMask, [1 1 size(Dskel,3)]).*Dskel); [sub11, sub21, sub31] = ind2sub(size(Dskel), idx1);
corline2 = imline(); idx2 = find(repmat(corline2.createMask, [1 1 size(Dskel,3)]).*Dskel); [sub12, sub22, sub32] = ind2sub(size(Dskel), idx2);

Eddig ezekkel az eredményekkel jó:

adja meg itt a kép leírását

A jobb oldali képen a fehér vonalak a csontvázat, a kék vonalak pedig a magokat mutatják. De ha megpróbálok távolságtranszformációt alkalmazni, nem találom a legrövidebb utat:

%distance map
dist1 = zeros(size(Dskel)); dist1(sub11, sub21, sub31) = 1; dist1 = bwdist(dist1);
dist2 = zeros(size(Dskel)); dist2(sub12, sub22, sub32) = 1; dist2 = bwdist(dist2);
dist12 = dist1+dist2;

%path
path1 = imregionalmin(Dskel.*dist12);
path2 = imregionalmin(Dskel.*dist12+10000.*(~Dskel));
%path3 = imregionalmin(Dskel.*dist12+Inf.*Dskel); %function cant handle inf

figure; ax(1) = subplot(1,3,1); imshow(squeeze(sum(double(path1),3)),[]); title('')
ax(2) = subplot(1,3,2); imshow(squeeze(sum(double(path2),3)),[]); title('')
%ax(2) = subplot(1,3,2); imshow(squeeze(sum(double(path3),3)),[]); title('')
linkaxes(ax); zoom(3);

adja meg itt a kép leírását

Az első lelet nagyjából a teljes csontvázat megtalálja, a második pedig hamisnak tűnik. A regionális minimum határozottan nem megfelelő az út megtalálásához, de nem biztos, hogy mi lenne más. A távolságszámításom sem veszi figyelembe a csontvázat, amit a második úton próbáltam megkerülni, de az sem működött jól.

Mit csináljak másképp?


Most találtam egy „gyors menetelés nevű dolgot, talán munka. Most nézd meg.


  • A bwdistgeodesic 3D adatrácsokat fogad el. 17.09.2017
  • Azt is javaslom, hogy nézze meg az imsegfmm-t az IPT-ben, amely szintén elfogadja a 3-D adatokat. Ezen megközelítések bármelyike ​​működni fog az Ön számára. mathworks.com/help/images/ref/imsegfmm.html 17.09.2017
  • @AlexTaylor D = bwdistgeodesic(Dskel,sub11,sub21,sub31); nem futott, de most megint rámutatsz, látom, maszkot vagy lineáris indexet is igénybe vehet. Kösz! Megnézem az imsegfmm-et is. 17.09.2017

Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..