【问题标题】:Using inflection point as threshold for segmentation使用拐点作为分割阈值
【发布时间】:2019-10-16 01:17:59
【问题描述】:

跟着@​​987654321@谈图像处理,我觉得导师的目标是达到传统门槛 分割以分离图像的背景和前景, 通过将多项式曲线拟合到图像的强度分布和 在曲线中找到一个拐点用作阈值。

代码如下:

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

其次,我在谷歌上搜索,并没有找到类似的方法,所以我想问一下这种方法好吗?你遇到过吗?

【问题讨论】:

    标签: matlab image-processing image-segmentation


    【解决方案1】:

    我以前没见过这个。

    我无法理解该方法。它不是在寻找多项式拟合的拐点。我认为它正在寻找导数最频繁的点。排序后的导数值的最小导数是至少出现两次的导数值(排序是这样的,它的导数总是非负的)。这一点是什么意思我不知道。它可能是多项式拟合的最大值或最小值之一?

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

    无论如何,由于视频中的人声称他们的方法产生了与 Otsu 相似的结果,当 Otsu 如此简单和完善时,我认为使用未经证实的方法没有任何意义。

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

    【讨论】:

    • "排序后的导数值的最小导数是至少出现两次的导数值"。你能解释一下这一点吗?
    • @user7427260:导数的绝对值是一堆>=0的值。对它们进行排序会导致函数不递减。它的导数为 0,其中该函数具有两个相同的值。如果原函数在两点具有相同的导数,则有两个相同的值。这最有可能发生在导数平坦的地方,但你无法证明,这只是一种可能性。如果有多个最小值怎么办?
    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2014-06-09
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多