Coronary Artery Edge Detection

3 次查看(过去 30 天)
Uluç Ali
Uluç Ali 2024-12-12
Hello everyone, I am working on developing a system that determines the boundaries of coronary arteries and calculates their tortuosity. The code I have written works well on certain datasets. However, it struggles to process low-quality images due to reasons such as contrast imbalance or blurriness. What kind of improvements can I make to ensure the code works on a broader range of data, or are there better methods you would recommend? I’ll share the code below. Thank you in advance.
function sequential_edge_detection()
img = imread("image.jpg");
if size(img, 3) == 3
img_gray = rgb2gray(img);
else
img_gray = img;
end
img_gray = im2double(img_gray);
img_smooth = imgaussfilt(img_gray, 2);
img_clahe_1 = adapthisteq(img_smooth);
options = struct('FrangiScaleRange', [1 5], ...
'FrangiScaleRatio', 1, ...
'BlackWhite', true, ...
'verbose', false);
[frangi_img, ~] = FrangiFilter2D(img_clahe_1, options);
img_clahe_2 = adapthisteq(mat2gray(frangi_img));
edges_canny = edge(img_clahe_2, 'Canny', [0.1, 0.3]);
figure;
imshow(edges_canny);
title('Final Edge Detection');
end

回答(1 个)

Swastik Sarkar
Swastik Sarkar 2024-12-18
Several methods are available to improve the workflow for edge detection, which may require improvisation based on the following options:
  • Instead of using imgaussfilt, consider utilizing imbilatfilt, an edge-preserving Gaussian bilateral filter.
  • The imdiffusefilt function can be employed to smooth out the edges of the image.
In both cases, strel can be used to clean up and connect edges after detection in the following way
s = strel('disk', 2);
imclose(edge ,s)
For more information regarding these functions, refer to the following documentation:

类别

Help CenterFile Exchange 中查找有关 Biomedical Imaging 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by