Background Correction in Image Pro Plus
Hi all!
I have been having issues with thresholding transmitted light microscope images of opaque particles. The thresholding works great when there are a lot of particles in the field of view. However, when there are only a couple to none, it tends to threshold the imperfection of the illumination from the microscope lamp. Then when the image is counted and measured the program finds particles that are not there due to the lighting. I have attached images to demonstrate my issue. The first way I tried to fix this was writing code to set a manual threshold limit, since these are grayscale images I set it to a certain value, but I am worried it may add bias to my data if not all images threshold at that value (causing some particles to be under or over measured). I have tried to use background correction, and it removes the uneven illumination, but then the image still does not threshold as clear (meaning an all black image). Am I missing something or is there something else that I can try?
Thanks in advance!
Jen
Grayscale image that contains no particles. It actually contains some particles but these particles are too small for my measurements.
Threshold of the grayscale image above.
Count and Measure of the image showing the program finding particles that are not there due to the illumination.
Background Image
Background Corrected
Best Answer
-
2017-08-22-095209
Jen --
If this was my project, I would:
** Take a small sample of images from the overall sample set (maybe 10) and make sure that they represent the variety that you see in the overall sample set
** Perform the CONVERT and FLATTEN on each image
** Get the HISTOGRAM STATISTICS for each image
** Set the THRESHOLD manually for each image
After doing this it should be possible to see if there is a mathematical method that can use the HISTOGRAM STATISTICS to set a good THRESHOLD.
The HISTOGRAM STATISTICS can be accessed and used to control the THRESHOLD as follows:
'Declare the variable that will hold the histogram stats
ReDim MyHstStats (10) As Single
'MyHstStats (0) - Mean value
'MyHstStats (1) - Standard Deviation
'MyHstStats (2) - Sum
'MyHstStats (3) - Minimum gray level (X-MIN)
'MyHstStats (4) - Maximum gray level (X-MAX)
'MyHstStats (5) - Not Currently Used
'MyHstStats (6) - Not Currently Used
'MyHstStats (7) - Not Currently Used
'MyHstStats (8) - Not Currently Used
'MyHstStats (9) - Not Currently Used
'Acquire and remember the histogram stats for enhanced image
ret = IpHstGet(HSTGET_GETSTATS,0,MyHstStats(0))
Dim MyStatsMEAN As Single
MyStatsMEAN = MyHstStats(0)
Dim MyStatsSTDV As Single
MyStatsSTDV = MyHstStats(1)
'Set the threshold based on the stats for the current image
ret = IpSegSetRange(0, Round (MyStatsMEAN + (3 * MyStatsSTDV) ), 255)
ret = IpSegPreview(CURRENT_C_T)
In the case shown above, I believe that the objects that were being THRESHOLDED and COUNTED were bright (??? to 255).
I hope this information is helpful.
-- Matt
0
Answers
Jen --
Based on my interpretation of your question, I took your image and did a process which may help you.
Please see the SCREEN CAPTURES and the DESCRIPTIONS below.
I hope this information is helpful.
-- Matt
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
ORIGINAL IMAGE = RGB 24
MONO 8 is GRAY CONVERSION of ORIGINAL
FLATTENED = PROCESS + FILTERS + ENHANCEMENT + FLATTEN + BRIGHT + 50 (As shown)
Tiled = MONO 8 on LEFT + FLATTEN on RIGHT + AUTO DARK THRESHOLD
FLATTENED IMAGE from above
HISTOGRAM showing MEAN of 150, STD DEV 2
THRESHOLD of 0 to MEAN (MEAN - ( 5 * STD DEV ) ) and COUNT with MIN SIZE FILTER 20 SQ PIX
Thanks for your response! I followed you until the threshold part. When I threshold with a min Area filter of 30 I still get tons of particles from the flattened image.
-Jen
Jen --
I was working with an UNCALIBRATED IMAGE so my MIN AREA SETTING of 20 is in SQ PIX.
If your image is CALIBRATED, you need to adjust your MIN AREA accordingly.
Oops . . . .
According to the SCREEN CAPTURE, my MIN AREA was set to 30. Sorry about that typo.
I hope this information helps.
-- Matt
Unfortunately I'm still not getting the image you're getting. Maybe I'm missing a step where you auto dark threshold. Because when I threshold I get those "waves" from the flattening filter that you show in the tiled image. How did you get from that to the background of just the particles? Sorry if this is easy and I'm just not getting it.
-Jen
Jen --
It sounds like your THRESHOLD is not set right.
I believe that mine was set from 0 (BLACK) to 140 to capture the PARTICLES but to ignore the (brighter) BACKGROUND.
Try that and let me (us) know how it goes.
-- Matt
-Jen
"Auto-dark" uses automatic histogram-based thresholding according to Otsu algorithm. On images with no or few small dark spots (like yours) it may segment the backround itself, so you should not use "Auto-dark" with your images, but rather use fixed level thresholding on background corrected images.
Extract background using the Background filter
and then Subtract it from the original image adding some shift, e.g. 100:
then do Count using a fixed threshold below the shift, e.g. 70.
Record all these steps to a macro and use this macro for all your 4200 images.
Yuri
Jen --
See if YURI's suggestion works for you.
Another way is to extract the HISTOGRAM for the ENTIRE IMAGE and then use the STATISTICS to set the THRESHOLD.
This may not work well if the character of your images changes dramatically and YURI's suggestion may work better.
Good luck.
-- Matt
Yuri-I was hoping I wouldn't have to do a fixed threshold because some images have lots of particles and some none (like shown above) so I was worried about measuring bias. But I'm starting to see that I may have to anyway.
Matt-I'm interested in trying to see if setting the threshold by the histogram statistics would work. All the images are taken at the same ExpPwr and same voltage setting on the microscope to keep a similar background intensity. The intensity stays around 120-140. The only thing that seems to change is the mean of the histogram based on how many particles are in the field of view. How do I threshold based on the statistics? And would I be able to write a macro for it?
Thank you so much for all your help with this! I've learned so much already!
Jen --
In an earlier message and below there is a bit of IMAGE-PRO PLUS CODE that illustrates how to READ the HISTOGRAM STATISTICS and SET the THRESHOLD based on the those STATS.
I hope this information is helpful.
-- Matt
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
The HISTOGRAM STATISTICS can be accessed and used to control the THRESHOLD as follows:
'Declare the variable that will hold the histogram stats
ReDim MyHstStats (10) As Single
'MyHstStats (0) - Mean value
'MyHstStats (1) - Standard Deviation
'MyHstStats (2) - Sum
'MyHstStats (3) - Minimum gray level (X-MIN)
'MyHstStats (4) - Maximum gray level (X-MAX)
'MyHstStats (5) - Not Currently Used
'MyHstStats (6) - Not Currently Used
'MyHstStats (7) - Not Currently Used
'MyHstStats (8) - Not Currently Used
'MyHstStats (9) - Not Currently Used
'Acquire and remember the histogram stats for enhanced image
ret = IpHstGet(HSTGET_GETSTATS,0,MyHstStats(0))
Dim MyStatsMEAN As Single
MyStatsMEAN = MyHstStats(0)
Dim MyStatsSTDV As Single
MyStatsSTDV = MyHstStats(1)
'Set the threshold based on the stats for the current image
ret = IpSegSetRange(0, Round (MyStatsMEAN + (3 * MyStatsSTDV) ), 255)
ret = IpSegPreview(CURRENT_C_T)
-Jen