separating vessels in fundus image

10 views (last 30 days)
Fizza Tahir
Fizza Tahir on 25 Jan 2015
Answered: Fizza Tahir on 16 Apr 2015
hey, i am working on a project in which i have identify between an aretry and a vein a vessel structure. for that purpose i have vessels at crossover points and apply some filters. my problem is that i cant separate vessels at crossover points. i have separated the vessels in skeleton image. now i have to separate the vessels in original image. i have attached a picture in which i have mapped my skeleton image on original image and i have also calculated the boundary of the vessel structures. as you can see in the picture the thinned image is split into vessels at branch points. can anyone help me split my original image as well.

Answers (3)

Image Analyst
Image Analyst on 25 Jan 2015
Use bwmorph() with the 'thicken' option. It will widen the skeleton image but not allow connection of separate branches.
  2 Comments
Image Analyst
Image Analyst on 25 Jan 2015
Fizza's "Answer" moved here:
but that will widen all the vessels to the same amount. here some vessels are narrower and some are wider.
Image Analyst
Image Analyst on 25 Jan 2015
Edited: Image Analyst on 25 Jan 2015
Well, sort of . It will widen until it hits something else. So they will not necessarily all be the same width, but I know what you mean. So in that case you have to AND your thickened skeleton with your blue mask (which I presume has the accurate widths) to get that branch with its proper width. Actually not the blue mask as you have it now, but the blue mask filled in so that it's solid between the vessel edges.

Sign in to comment.


Muhammad Ahsan Ansari
Muhammad Ahsan Ansari on 16 Apr 2015
Assalam-U-Alaikum
Ms Fizza, i am also working on a project and i am facing the same problem you faced earlier this year. I want to ask you that have you find any solution regarding the above mentioned problem?
if you have then can you please tell me the steps or if you can provide me some code lines for the above mentioned problem i will be grateful of you.
Thank you.

Fizza Tahir
Fizza Tahir on 16 Apr 2015
well, i had the coordinates of crossovers and branch points. i displayed them on a new black image. and dilated them. then subtracted that image from my segmented image. I'm not using this approach for my project anymore so its pretty crude form of code. but it works.
[a,b,c,d,e,f]=crossovers_7by7(BW1); %this function returns coordinates of crossovers,branchpoints,ends
crossovers=[a,b]; branches=[c,d]; ends=[e,f];
[rows_cross]=length(crossovers); [rows_branch] =length(branches); [endsize]=length(ends);
black=zeros(size(segmented));
for p=1:rows_cross i=crossovers(p,1); j=crossovers(p,2); black(i,j)=1; end for p=1:rows_branch i=branches(p,1); j=branches(p,2); black(i,j)=1;
end
dilated=imdilate(black,strel('disk', 6) ); bw_branches=segmented-dilated;

Community Treasure Hunt

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

Start Hunting!