How can I improve the accuracy of identifying local maxima

5 visualizzazioni (ultimi 30 giorni)
Hello all,
I used imregionalmax() to identify the position of the nucleus in the embryo image, but the result of the recognition ignores some cells at the edge of the embryo, how can I improve its accuracy?
What confuses me is that after Gaussian noise reduction, using imregionalmax() can not identify the local maximum of the image.
The following image is a comparison.
raw image
raw image
raw image after imregionalmax()
Gaussian noise reduction image
Gaussian after imregionalmax()
Thanks in advance!
  2 Commenti
Matt J
Matt J il 11 Lug 2020
What confuses me is that after Gaussian noise reduction, using imregionalmax() can not identify the local maximum of the image.
My guess is that you are displaying the image over a gray level range that hides the regional maxima. The output of imregionalmax that I see is far from blank (see below). It is not useful, however, because unless you get rid of absolutely all noise, every single noise spike will show up as a regional max.
Jeremy Zhu
Jeremy Zhu il 11 Lug 2020
So is there any methods to get rid of absolutely all noise?

Accedi per commentare.

Risposte (2)

Matt J
Matt J il 11 Lug 2020
Modificato: Matt J il 11 Lug 2020
I don't think you have any hope of perfect recognition, but this result looks better to my non-clinical eye.
A=rgb2gray(imread('raw image.png'));
B=medfilt2(A,[5,5]);
NucleiiBW=bwareafilt(B-medfilt2(B,[20,20])>40,[20,inf]);
imshow(NucleiiBW)
  3 Commenti
Matt J
Matt J il 11 Lug 2020
Modificato: Matt J il 11 Lug 2020
Even if I were open to that, I doubt my Inbox could handle an 80 MB attachment. I don't see what there is to gain by processing the original picture. You should resize it.

Accedi per commentare.


Image Analyst
Image Analyst il 11 Lug 2020
Modificato: Image Analyst il 11 Lug 2020
imregionalmax() only identifies the local max -- it will not get the whole spot. Within the whole spot, there may be only 1 or 2 pixels that are actually the max.
I think you were actually meaning to run a top hat filter on it using imtophat(), so give that a try with different window sizes. A top hat filter is a morphological closing operation (a local max but not THE local max like imregionalmax) minus the original image. So it basically finds bright spots on a background which may be varying in intensity.
The image looks fairly flat to begin with so you can use some kind of noise reduction, like imgaussfilt() like you did or medfilt2() like Matt did, and then just threshold and so some size filtering with bwareafilt() or bwareaopen() if you still have some noise left.

Categorie

Scopri di più su Biomedical Imaging in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by