Selecting a region in an image

Hi all,
I want to be able to select a part of an image and store it in MATLAB. Can anyone tell me how I can do that.
I want to be able to load it and select the circle and store its circumference. Can I do this in MATLAB?
Thanks.
NS

Answers (2)

It's pretty easy. Look at my color segmentation demos for how to pick out colors, and BlobsDemo for how to find perimeter and area. Basically it's this 1) separate the color channels into red, green, and blue. 3 lines.
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
2) do logical operations on them to get just the red circle. 1 line.
3) call bwlabel or bwconncomp. 1 line.
[labeledImage numberOfBlobs] = bwlabel(binaryImage, 8);
4) call regionprops. 1 line.
blobMeasurements = regionprops(labeledImage, originalImage, 'Perimeter');
So in 6 lines you should have it. Write back if you still can't get it.

2 Comments

Thank you for the reply image analyst. But please refer to my conversation with Nathan in the comments above. I am working with digital image contrast images of biological cells. I want to be able to edge detect the nuclear membrane and the cellular membrane. I have also given a link to show what my image looks like. Can you help me in this?
Those kind of images are always tough. You could try thresholding and then using imclose to close the gaps. Then bwlabel and regionprops to find circular shapes. Or you could try hough() to try to find the circles directly. Unless you have thousands of images your best bet might be to manually locate them with imellipse.

Sign in to comment.

Sean de Wolski
Sean de Wolski on 8 Jul 2011
There is a demo for this in the documentation for the Image Processing Toolbox.

7 Comments

For further assistance, rather than just a hint:
http://www.mathworks.com/products/image/demos.html?file=/products/demos/shipping/images/ipexroundness.html
Thanks Sean and Nathan. The image I gave is just an example. Ones I work with have a lot of noise and detail in it. So ordinary thresholding and perimeter detection doesnt work. I want to be able to do it manually
You can always threshold, do some filtering (medfilt, bwmorph options, etc), and use bwselect to manually select which region you want to do things to. Also, I think you should modify your question to not be so general such that it includes this extra information (noise, manual selection, whathaveyou).
I should make my situation more specific. Ok so I work with biological cells. I want to be able to get 2 edges i.e. one of the cellular membrane and one of the nuclear membrane. My images are digital image contrast or DIC images. With normal thresholding and edge detection techniques, I am able to get only the cellular membrane. It is difficult to get the nuclear membrane since there is lot of detailing within the cell. I figure it will be easier if I manually select the nuclear membrane to use it. Can you help me now :)
I think a real image that you are working with, rather than some simple shape image, would be beneficial. Images that I work with resemble this, for example: https://picasaweb.google.com/lh/photo/3OP30Zs6eFGUMLEB7uESR7YuJ-oSmcGYVI3yhwhKR84
http://www.jpk.com/dic-image.media.812c5ecacd5a6f8386c39649cb0cd3bbv1.jpg This image is similar to one I work with. I am able to get the outer perimeter of the cell using imageJ and MATLAB. I want to be able to get the nuclear perimeter as well.
Hm. That is pretty hard to discern "automatically" through code. Perhaps just manually selecting the image (using ginput with curve fitting, perhaps?) would suffice.

Sign in to comment.

Categories

Asked:

NS
on 8 Jul 2011

Community Treasure Hunt

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

Start Hunting!