Isolating specific dots in an image.

조회 수: 4 (최근 30일)
Kimo Kalip
Kimo Kalip 2018년 6월 21일
댓글: Kimo Kalip 2018년 6월 27일
Hello, I'm trying to get my image to the point where only the dots inside the black squares remain.
So far, all I've done with this code is use inmextendedmin on the original grayscale image, and then masked it ontop of the grayscale image to produce this result.
figure(1);
imshow(grayImage);
mask = imextendedmin(grayImage,2);
figure(2);
imshow(mask);
figure(3);
imshowpair(grayImage,mask,'blend');
Before, I had been trying to use watershedding, dividing the background, and a lot of other neat tricks to try and single out the black dots, but it seems that this simple bit of code alone gets me half way to what I want (As each black square has a dot already in it, all i want are those dots). Is there a way to get rid of everything else in this image besides the gray dots inside the black dots?
The problem I often had with watershedding and whatnot is I needed a variable threshold, as well as watershedding was rather time and processes intensive, so I'm trying to find more efficient ways of doing it.
  댓글 수: 1
Kimo Kalip
Kimo Kalip 2018년 6월 21일
편집: Kimo Kalip 2018년 6월 25일
Notice also how there is a lot of different levels of darkness in the background, wondering if that too may be an issue.

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

채택된 답변

Anton Semechko
Anton Semechko 2018년 6월 21일
im=imread('https://www.mathworks.com/matlabcentral/answers/uploaded_files/122320/2steps%20from%20perfection.PNG');
im=max(im,[],3);
bw_bkg=imfill(im<=50,'holes');
bw=im>50 & bw_bkg;
figure, imshow(bw)

추가 답변 (1개)

Kimo Kalip
Kimo Kalip 2018년 6월 22일
Oh man, thats perfect, thanks!
  댓글 수: 13
Anton Semechko
Anton Semechko 2018년 6월 26일
편집: Anton Semechko 2018년 6월 26일
For your type of image data, you can try to automate threshold selection as follows:
(1) Initialize threshold (e.g., thr=10)
(2) Apply threshold to image and count the number of connected components (representing the "wells" in which the white dots are embedded) above some a priori defined area
(3) Increment threshold: thr_new <-- thr + 1
(4) Repeat (2) using thr_new and compare number of connected components obtained with thr, if the number of "wells" decreases, accept thr as best value of intensity threshold and terminate search, otherwise set thr <-- thr_new and go to step (2)
Kimo Kalip
Kimo Kalip 2018년 6월 27일
I hadn't thought of that, its actually a really good idea - thanks! Where does it stop though? Wouldn't I want to keep going until all of the wells disappear? But by the same token, I imagine I'd start losing dots I actually want to keep before I got rid of all the large wells, no?
Thanks again for all the help so far!

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

카테고리

Help CenterFile Exchange에서 Convert Image Type에 대해 자세히 알아보기

제품


릴리스

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by