【问题标题】:Matlab getting blood vessels only in imageMatlab仅在图像中获取血管
【发布时间】:2014-02-02 23:17:59
【问题描述】:

我正在尝试使用图像处理工具箱中提供的功能获取视网膜图像(下图 1),以仅显示黑白血管(下图 2),阈值化、形态学运算等。我尝试了以下方法,但没有得到我需要的结果:

% READ IMAGES 
eye1 = imread('Retina1.png');
%display coloured version(original)
imshow(eye1);

% convert to grayscale
grayeye1 =rgb2gray(eye1);

% display grayscale
imshow(grayeye1);
    
% make darker
dgrayeye1 = imadjust(grayeye1,[0.1 0.9],[]);
imshow(a);
    
se = strel('disk',1);
    
cannyeye = edge(dgrayeye1,'canny',0.15);
figure,imshow(cannyeye);
    
dilate = imdilate(cannyeye,se);
figure, imshow(dilate)


图 1:

图片 2:

【问题讨论】:

    标签: image matlab image-processing


    【解决方案1】:

    这不是一件容易的事。您可能需要在以下几篇参考论文中进行调查:

    1. Retinal vessel extraction by matched filter with first-order derivative of Gaussian。而Matlab代码包含在这个post中。

    2. An Automatic Hybrid Method for Retinal Blood Vessel Extraction。它使用带有开/关和顶帽变换的形态学方法。之后应用模糊聚类。

    3. 最常用的血管检测方法来自 Frangi 等人的论文Hessian-based Multiscale Vessel Enhancement Filtering。有一个 Matlab 实现,FrangiFilter2D,适用于 2D 血管图像。

    我在您的情况下尝试了此代码,希望您可以从这里开始...

    options=struct('FrangiScaleRange', [1 5], 'FrangiScaleRatio', 1, 'FrangiBetaOne', 1,...
            'FrangiBetaTwo', 7.5, 'verbose',true,'BlackWhite',true);
    [outIm,whatScale,Direction] = FrangiFilter2D(double(dgrayeye1), options);
    imshow(outIm)
    

    图片:

    【讨论】:

    • 我将如何删除外线(外面的大圆圈)?
    • 谢谢 user2058776。我没试过,但是你可以使用imfindcircles(mathworks.com/help/images/examples/…),或者regionprops来检测圆和半径,并将半径之外的区域设置为零
    • 或者更简单,您可以使用一些阈值方法创建一个圆形掩码(二进制),稍微缩小半径,然后将掩码外的值设置为零
    • 有人可以解释选项结构中指定的每个参数的含义和实际用途吗? @lennon310
    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多