Привет,
Я пытаюсь рассчитать извилистость кровеносных сосудов. (Извилистость сосудов рассчитывается как сумма длин ветвей, деленная на сумму евклидовых расстояний между их конечными точками).
У меня есть следующие вопросы:
- Как рассчитать длину как реальных ветвей, так и воображаемых прямых линий между узлами
- Как мне отметить ветви сосуда (оранжевые) и узлы ветвей (желтые), как показано на рисунке.
- Я рассчитываю «длину позвоночника» как сумму всех пикселей. Как рассчитать длину отдельных ветвей?
- Буду признателен за любые предложения по предварительной обработке.
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
ПРИМЕЧАНИЕ.
Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech ,ME,M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
Вызовите bwmorph(), чтобы получить точки ветвления, а затем используйте это, чтобы стереть точки ветвления. Затем пометьте каждую кривую и вызовите bwmorph(), чтобы получить конечные точки для получения расстояния по прямой линии. Довольно просто, на самом деле вы, вероятно, уже это сделали. Возможно, вы получили что-то вроде (непроверенный):
bp = bwmorph(mask, 'branchpoints'); mask(bp) = false; % Erase branchpoints. [labeledImage, numRegions] = bwlabel(mask); for k = 1 : numRegions thisRegion = ismember(labeledImage, k); endpoints = bwmorph(thisRegion, 'endpoints'); % Get coordinate [r, c] = find(endpoints);
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ