MATLAB: Trouble Removing Uneven Background Lighting from Image

background removaldigital image processingimage processingimopenimtophat

Hello,
As I stated I am having some trouble removing a background from an image. I have tried using imopen, imtophat, and a couple other methods, but all of them result in the same problem. The code considers my entire image as a background. For example, here is my original image.
My code to load it is pretty simple
drop=mat2gray(imread('st000.tif'));
As you can see the illumination is fairly uneven, and when I go to convert it to a bw image it cuts off the last half of the stream. When I try and use imopen to find the background this is what I get.
background = imopen(drop,strel('disk',15));
figure()
imshow(background)
If I use imtophat I get this.
I2 = imtophat(drop,strel('disk',15));
figure()
imshow(I2)
Since this image is a little dark, I tried to enhance it using
I3=imadjust(I2);
figure()
imshow(I3)
which gave me
I can't really use this image, since it is so blurry. I have tried taking a static image with the background, subtracting that from the bw image of the original, and that sort of works.
But as you can see it removed a lot of the resolution on the image, which I think has something to do with how I actually convert it into a bw image. I think I can get a better resolution if I can find a way to make a uniform background before converting it to bw.

Best Answer

Try using imbothat instead of imtophat, with a slightly larger kernel size.
I2= imbothat(drop, strel('disk', 30));
worked for me, with the exception of some artifacts around the edge.
Related Question