使用拐点作为分割阈值

时间:2019-05-30 11:20:49

标签: matlab image-processing image-segmentation

this tutorial之后,我认为导师的目标是达到传统的门槛 分割以分离图像的背景和前景, 通过将多项式曲线拟合到图像的强度分布,并 在曲线中找到一个拐点用作阈值。

代码如下:

img = imread('rice.tif');
degree = 6;

%fitting intensity distribution
[frequency, intensity] = imhist(img);
[polynome, ~, mu] = polyfit(intensity, frequency, degree);
eval_fit = polyval(polynome, intensity, [], mu);

但是,在下一个代码块中:

%locate inflection point
[values, indices] = sort(abs(diff(eval_fit)));
[m, i] = min(diff(values))

thresh = indices(i)/255;
img_seg = imbinarize(img, thresh);

具体地说,前两行我不明白,如果要第二次推导,为什么还要使用abssort

第二,我在Google上进行搜索,但没有找到类似的方法,所以我想问一下这种方法是否好?你遇到了吗?

1 个答案:

答案 0 :(得分:2)

我以前没看过这个。

我无法绕过该方法。它不是在寻找多项式拟合的拐点。我认为它正在寻找导数最频繁的点。排序后的导数值中导数的最小值是至少出现两次的导数值(排序使得其导数始终为非负数)。这一点意味着我不知道。可能是多项式拟合的最大值或最小值之一?

视频中的人声称这是他们的方法,这意味着他们发明了这种方法。他们的Google Scholar page似乎并未列出有关此方法的论文。

无论如何,由于视频中的人声称他们的方法产生的结果与大津相似,所以我认为在大津如此简单和完善的情况下,使用未经验证的方法毫无意义。

我还建议您从一本好书中学习图像处理,而不要从YouTube上的随机教程中学习。 YouTube上有很多废话,通常很难区分好坏。生产价值不一定与正确性相关。