Image 光线背景下的非均匀照明校正-matlab

Image 光线背景下的非均匀照明校正-matlab,image,matlab,background,Image,Matlab,Background,我目前正在使用阈值进行图像分割。我试过大津的方法和冈萨雷斯的方法。所以我所做的是: % Apply different threshold methods otsu_thresh = graythresh(I); [bw, gw_thresh] = threshold_gw(I); I_OT = im2bw(I, otsu_thresh); I_G = im2bw(I, gw_thresh/255); 现在,我得到的结果如下所示: 正如你所看到的,我对大津的阈值处理有一些问题,我假设这是因

我目前正在使用阈值进行图像分割。我试过大津的方法和冈萨雷斯的方法。所以我所做的是:

% Apply different threshold methods
otsu_thresh = graythresh(I);
[bw, gw_thresh] = threshold_gw(I);

I_OT = im2bw(I, otsu_thresh);
I_G = im2bw(I, gw_thresh/255);
现在,我得到的结果如下所示:

正如你所看到的,我对大津的阈值处理有一些问题,我假设这是因为非均匀的背景照明。 我举了一个例子: 关于校正非均匀照明,但不幸的是,在所有示例中,背景都是暗的,对象更白,因此它们会打开然后减去背景

在我的例子中,背景比对象轻,所以我改为执行imclose。现在我有了背景:

当我试图从原始图像中减去这个背景时,问题来了,所有的东西都变黑了。这是有意义的,因为对象已经是黑色的(因此值为0)。
我找不到任何方法来减去背景并保留对象。有人对此有想法吗?

您可以使用一种称为自适应阈值的技术,或者使用三角形方法进行阈值设置

此外,如果你从背景中减去背景,你当然会变黑!实际上,您希望用像素值减去黑色量,即
1-x
(整数图像为255-x)

要减去黑度,请使用

newimage = 1 - ((1-oldimage)-(1-background));

简化留给读者作为练习…

根据你的推理,物体比背景暗。因此,一旦你估计了背景的颜色(顺便说一句,效果不错),你就可以

BW = origImage < backgroundImage; 
BW = origImage > backgroundImage;