How can I detect optic cup and disc from retinal image using matlab ? I want to find out the measurement of optic rim ( distance between optic cup and optic disc )
I have tried the following code
RGB = imread('img/A(4).jpg');
G = DialateBloodVessel(RGB);
[BW,H] = RGBThresh(G,220,60);
H = H(:,:,3);
I = edge(H,'Roberts',0.1);
imshowpair(I,G);
%%%%%%%%%% DialateBloodVessel( RGB ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ RemovedBV ] = DialateBloodVessel( RGB )
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
IM = RGB;
SE = strel('disk',10);
IM2 = imdilate(IM,SE);
%SE2 = strel('disk',10);
RemovedBV = imerode(IM2,SE);
end
%%%%%%%%%% RGBThresh(RGB,Ch1,Ch3) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [BW,maskedRGBImage] = RGBThresh(RGB,Ch1,Ch3)
I = RGB;
% Define thresholds for channel 1 based on histogram settings
channel1Min = Ch1;
channel1Max = 255.000;
% Define thresholds for channel 2 based on histogram settings
channel2Min = 0.000;
channel2Max = 185.000;
% Define thresholds for channel 3 based on histogram settings
channel3Min = Ch3;
channel3Max = 255.000;
% Create mask based on chosen histogram thresholds
sliderBW = (I(:,:,1) >= channel1Min ) & (I(:,:,1) <= channel1Max) & ...
(I(:,:,2) >= channel2Min ) & (I(:,:,2) <= channel2Max) & ...
(I(:,:,3) >= channel3Min ) & (I(:,:,3) <= channel3Max);
BW = sliderBW;
% Initialize output masked image based on input image.
maskedRGBImage = RGB;
% Set background pixels where BW is false to zero.
maskedRGBImage(repmat(~BW,[1 1 3])) = 0;
end
I get the following output, but I need perfect circles in any image: