Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 有人知道如何实现“最优全局自适应阈值”吗?_Image_Image Processing_Emgucv - Fatal编程技术网

Image 有人知道如何实现“最优全局自适应阈值”吗?

Image 有人知道如何实现“最优全局自适应阈值”吗?,image,image-processing,emgucv,Image,Image Processing,Emgucv,有人知道如何实现“最优全局自适应阈值”算法吗 如果知道,请与我分享 谢谢。看看基于图像直方图选择全局阈值的方法 public int OtsuThreshold(double[] histogram) { double pr1, pr2, pr; int t = 0; double[] vet = new double[255]; double major = -1; //int idx; for (int k = 1; k < Util.

有人知道如何实现“最优全局自适应阈值”算法吗

如果知道,请与我分享

谢谢。

看看基于图像直方图选择全局阈值的方法

public int OtsuThreshold(double[] histogram)
{
    double pr1, pr2, pr;
    int t = 0;
    double[] vet = new double[255];

    double major = -1;
    //int idx;
    for (int k = 1; k < Util.GrayLevels-1; k++)
    {                
        pr1 = HistogramProbability(0, k, histogram);
        pr2 = HistogramProbability(k + 1, Util.MaxGrayLevel, histogram);
        pr=pr1*pr2;
        if(pr==0) pr=1;

        double result = Math.Pow((ImageMean(0, k, histogram) * pr2) - (ImageMean(k + 1, Util.MaxGrayLevel, histogram) * pr1), 2) / pr;
        if (result > major)
        {
            major = result;
            t = k;
        }
    }

    //t = IMaior(vet,Util.GrayLevels);
    return t;
}        


public double HistogramProbability(int start, int end, double[] histogram)
{
    if (start < 0 || end > histogram.Length)
        return 0;

    double p = 0;
    for (int i = start; i < end; ++i)
        p += histogram[i];

    return p;
}


public double ImageMean(int start, int end, double[] histogram)
{
    double mean = 0;

    if (start < 0 || end > histogram.Length) return 0;

    for (int i = start; i < end; i++)
    {
        mean += i * histogram[i];
    }

    return mean;
}
抱歉,我知道这里有很多源代码,有些方法可能会丢失,但是如果你遵循它,我会发现它并不那么难。不幸的是,我发明的轮子没有使用任何库,但我希望这里的源代码可以帮助你用你选择的语言编写它

这可能很有用

另外,如果你有一个图书馆附近的工程或CS材料,我推荐。它清楚地解释了大津方法的工作原理

问候