Tortuosity of blood vessels
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
BBm
el 17 de Oct. de 2014
Comentada: Sean de Wolski
el 11 de Feb. de 2021
Hi all,
I need to find the tortuosity index of a skeletonized blood vessel (attached text file for x y coordinates) using total squared curvature approach. it's a bit difficult for a matlab beginner like me. I do not have any experience with this kind of equation at all. Can anyone help me creating a function just for this purpose? Thanks
0 comentarios
Respuesta aceptada
Sean de Wolski
el 17 de Oct. de 2014
The second example might interest you.
2 comentarios
Tri Rowstenkowski
el 9 de Feb. de 2021
Editada: Tri Rowstenkowski
el 9 de Feb. de 2021
Hello Sean,
I am trying to calculate the Tortuosity of blood vessels. (Vessel tortuosity is calculated as the sum of branch lengths divided by the sum of imaginary straight lines).
I have the following questions:
- How to calculate the lengths of both actual branches and the imaginary straight lines between nodes
- How do I mark the vessel branches (orange) and the branch nodes (yellow) as shown in the picture.
- I am calculating "spinelength" as the sum of all pixels. How do I calculate individual branch lengths?
- Any suggestions in preprocessing would be appreciated.
I followed https://www.mathworks.com/videos/medical-image-processing-with-matlab-81890.html video and read the https://www.mathworks.com/matlabcentral/answers/522378-how-to-measure-the-diameter-along-the-length-of-an-object#answer_429784 post. Any help would be highly appreciated. Thank you.
clc;
clear;
close all
% Read the image
I=imread('VAD.png');
figure,imshow(I)
%convert it to gray scale
I_gray=rgb2gray(I);
%Sharpen the image
b = imsharpen(I_gray,'Amount',8);
h = fspecial('average', [3 3]);
b = imfilter(b, h);
%choose brighter objects
Bina=b>150
figure,imshow(Bina);
se = strel('cube',3)
erodedBW = imerode(Bina,se);
%Remove small objects from binary image
BW2 = bwareaopen(Bina,100)
figure,imshow(BW2);
skelImage = bwskel(BW2, 'MinBranchLength', 10);
MinBranchLength = round(sum(skelImage(:))/2)
skelImage = bwskel(BW2,'MinBranchLength',MinBranchLength);
figure,imshow(skelImage)
endpointImage = bwmorph(skelImage, 'endpoints');
[rows, columns] = find(endpointImage)
spineLength = sum(skelImage(:))
straightLineDistance = sqrt((columns(2) - columns(1))^2 + (rows(2) - rows(1))^2)
tortuosity = spineLength / straightLineDistance
Sean de Wolski
el 11 de Feb. de 2021
Your calculation for spinelength assumes that pixels of any connectivity are equivalently far apart which is not true. You need to account for corner connected v. edge connected. bwdistgeodesic will do this for you (metric of every point to an end point). Then take the max value of that.
Más respuestas (1)
Maz M. Khansari
el 15 de Oct. de 2019
Check this out https://www.mathworks.com/matlabcentral/fileexchange/72986-vessel-tortuosity-index-vti
0 comentarios
Ver también
Categorías
Más información sobre Biomedical Imaging en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!