Any ideas how I can perform segmentation on this image?

I have tried a range of methods such as clustering and thresholding to seperate the white circle from the brown ring without any luck.
Please could someone help?
Thanks!

댓글 수: 4

Have you tried the color thresholder app on the Apps tab of the tool ribbon? Have you tried findcircles()?
Can you get better focus and lighting and remove the pipette?
This is from a stack of images from someone else's data, so i cannot remove the pipette
I've tried flatfield correction - it works nicely to remove the shading from the bottom left corner but not the shadow in the white circle.
I've tried imfind circles, but as i said before, these images are from a stack, so some images do not have a circle but rather an elipse. Is there an option to find elipses or circuloid objects instead? Can i manipulate the hough circle transform to achieve this?
I've tried color thresholding - it's goood but patchy (see image) and i have a scalibility issue applying this to the whole stack of images
Use bwconvhull. Do you want the actual boundary, following all the little nooks and crannies, or do you want the best-fit perfect circle?
Pranaya Kansakar
Pranaya Kansakar 2020년 5월 21일
편집: Pranaya Kansakar 2020년 5월 21일
Ideally id like to find the area of the white circle
Also,i think using bwconvhull requires binarization of the image.
I'm stuck at that stage as binarization does a terrible job .

댓글을 달려면 로그인하십시오.

답변 (1개)

Ryan Comeau
Ryan Comeau 2020년 5월 29일
Hey, i've read through the comments, might have a binarization solution for you. The imbinarize function is very elaborate, take a good look through the documentation. Here is what i've done in the past to get the best binarization results.
image=imread('path/to/image')
image=rescale(image,0,1); %matlab loves 0-1 range for binarize don't ask me why lol
BW_im=imbinarize(image);
If this doesn't work, try a variable sensitivity, adaptive binarization, and create some validation conditions for yourself:
is_done = 0;
sensitivity= 0.1; %tune this to whatever you want
i=1;
while is_done == 0
BW(i).image = imbinarize(I,'adaptive','Sensitivity',sensitivity);
i=i+1;
sensitivity=sensitivity+0.1;%tune this to what you want.
if sensitivity >= 1
is_done == 1
end
end
%you then place some validation criterion on you binarization and take which one is the best
Hope this helps,
RC

댓글 수: 1

Pranaya Kansakar
Pranaya Kansakar 2020년 5월 29일
편집: Pranaya Kansakar 2020년 5월 29일
Hey Ryan
Thanks for the comments!
I'll give them a go!

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

제품

릴리스

R2020a

질문:

2020년 5월 21일

편집:

2020년 5월 29일

Community Treasure Hunt

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

Start Hunting!

Translated by