我目前正在使用阈值进行图像分割。我尝试过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);
现在,我得到的结果如下所示:
正如您所看到的,我对Otsu的阈值处理存在一些问题,我认为这是因为非均匀背景照明。 我跟着这个例子: http://www.mathworks.nl/help/images/examples/correcting-nonuniform-illumination.html 关于校正非均匀照明,但不幸的是在所有例子中背景都是暗的,物体更白,因此它们会打开然后减去背景。
在我的情况下,背景比对象轻,所以我执行了imclose。现在我有了背景:
当我尝试从原始图像中减去此背景时,问题就出现了,一切都变黑了。这是有道理的,因为对象已经是黑色(因此值为0)。 我找不到任何方法来减去背景并保留对象。有人对此有所了解吗?
答案 0 :(得分:0)
您可以使用称为自适应阈值处理的技术,或者使用三角形方法进行阈值处理。
另外,如果你从背景中减去背景,当然你会变黑!实际上,您希望减去黑度,即1-x
,其中x
为像素值(或整数图像为255-x)。
要减去黑度,请使用
newimage = 1 - ((1-oldimage)-(1-background));
简化是留给读者的练习......
答案 1 :(得分:0)
根据您的推理,物体比背景暗。因此,一旦你估计了背景的颜色(好的结果BTW),你可以简单地
BW = origImage < backgroundImage;
这将为您BW
提供关于对象的true
和false
其他任何地方。
如果您想让对象保持黑暗(false
)并将所有内容设置为true
,那么
BW = origImage > backgroundImage;