How to improve optic disc removal code?
2 次查看(过去 30 天)
显示 更早的评论
I want to perform optic disc removal as a step for doing diabetic retinopathy grading. The code is working fine, but for some of the images the result is not what is expected. Below is the code I am using for optic disc removal. By following a paper I am creating meshgrid and then finding the x-y cordinates that corresponds to maximum intensity values (as optic disc has the highest intenstiyintensity in retinal images). After that, I am creating a circle of radius 45 around the brightest point. I used "diaretdb0 database" for testing. Out of 126 images, the result for 8 image is wrong. Below is the code.
retina = imread('Input_Image.png');
retinaGband = retina(:,:,2); %Green Chanel extraction
retinaGband = imresize(retinaGband,[512 512]);
mask = imread('fmask.tif'); %mask
mask = imresize(mask,size(retinaGband));
%%Histogram Equalization
heImage = adapthisteq(retinaGband,'clipLimit',0.02,'Distribution','rayleigh');
% Mask the image.
heImage = heImage .* uint8(mask);
med2 = medfilt2(heImage);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%;
[imageSizeX, imageSizeY] = size(med2);
[x, y] = meshgrid(1:imageSizeX, 1:imageSizeY); %meshgrid creation
[r, c] = find(med2 == max(med2(:))); %finding max values row and column wise
centerX = max(r); %x-cordniate with max intensity value
centerY = max(c); % y-cordinate with max intensity value
radius = 45;
circlePixels = (x - centerY).^2 ...
+ (y - centerX).^2 <= radius.^2;
circlePixels = imcomplement(circlePixels);
%%masking
mask1 = med2 .* uint8(circlePixels);
figure,imshow(mask1);
The below image shows the ouput with wrongly identified optic disc.
The actual optic disc portion to be exculded is highlighted in green circle in the image to show what was expected. Below is the input image for the wrong output.
1 个评论
回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Optics 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!