有人知道如何实现“最优全局和自适应阈值”算法吗?
如果知道,可以和我分享。
谢谢。
发布于 2010-07-27 23:40:42
看看基于图像直方图选择全局阈值的Otsu's方法。
发布于 2010-07-28 04:30:57
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;
}对不起,我知道这里有很多源代码,一些方法可能会丢失,但如果你遵循它,我会发现它并不是那么难。不幸的是,我正在重新发明轮子(没有使用任何库),但我希望这里的源码可以帮助你用你选择的语言编写它。
此link可能会很有用
另外,如果你附近有图书馆(工程或CS资料),我推荐使用this book。它清楚地解释了Otsu方法是如何工作的。
问候
https://stackoverflow.com/questions/3344503
复制相似问题