|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
最近尝试着用fpga做图像二值化处理,把c算法转化成vhdl实现。目前完成的是把图片读入到rom,然后做一个直方图统计。但对于c算法中的阈值确定这部分有疑问,对于这些有数据相关性的复杂运算如何处理。是否就是调用乘、除法模块搭一串电路? 如果把m1复用生成m2,m2再生成m3,势必会有一个延迟,那么后面计算诸如cd = m2 - m1 * m1如何同步?
希望各位前辈能够给一个思路,或者提供一下一些相关的例程,指点一下迷津,不甚感激。
这个算法是moment-preserving,有熟悉ostu算法的大虾也希望能指点一下。
-----------------------------------------------------------
/* compute probabilities */
//NHIST /* no. bins in histogram */
//n /*total pixel/
for (i = 0; i < NHIST; i++)
prob = (double) iHist / (double) n;
/* calculate first 3 moments */
m1 = m2 = m3 = 0.0;
for (i = 0; i < NHIST; i++) {
m1 += i * prob;
m2 += i * i * prob;
m3 += i * i * i * prob;
}
cd = m2 - m1 * m1;
c0 = (-m2 * m2 + m1 * m3) / cd;
c1 = (-m3 + m2 * m1) / cd;
z0 = 0.5 * (-c1 - sqrt (c1 * c1 - 4.0 * c0));
z1 = 0.5 * (-c1 + sqrt (c1 * c1 - 4.0 * c0));
pd = z1 - z0;
p0 = (z1 - m1) / pd;
p1 = 1.0 - p0;
/* find threshold */
for (thresh = 0, pDistr = 0.0; thresh < NHIST; thresh++) {
pDistr += prob[thresh];
if (pDistr > p0)
break;
} |
|