修正浅色背景上的非均匀照明 - matlab

时间:2014-06-26 15:58:13

标签: image matlab background

我目前正在使用阈值进行图像分割。我尝试过Otsu的方法和Gonzalez的方法。所以我做的是:

% 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);

现在,我得到的结果如下所示: enter image description here

正如您所看到的,我对Otsu的阈值处理存在一些问题,我认为这是因为非均匀背景照明。 我跟着这个例子: http://www.mathworks.nl/help/images/examples/correcting-nonuniform-illumination.html 关于校正非均匀照明,但不幸的是在所有例子中背景都是暗的,物体更白,因此它们会打开然后减去背景。

在我的情况下,背景比对象轻,所以我执行了imclose。现在我有了背景: enter image description here

当我尝试从原始图像中减去此背景时,问题就出现了,一切都变黑了。这是有道理的,因为对象已经是黑色(因此值为0)。 我找不到任何方法来减去背景并保留对象。有人对此有所了解吗?

2 个答案:

答案 0 :(得分:0)

您可以使用称为自适应阈值处理的技术,或者使用三角形方法进行阈值处理。

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

要减去黑度,请使用

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

简化是留给读者的练习......

答案 1 :(得分:0)

根据您的推理,物体比背景暗。因此,一旦你估计了背景的颜色(好的结果BTW),你可以简单地

BW = origImage < backgroundImage; 

这将为您BW提供关于对象的truefalse其他任何地方。
如果您想让对象保持黑暗(false)并将所有内容设置为true,那么

BW = origImage > backgroundImage;