我想在一维阵列上应用一维高斯滤波器。对于python,有很多库可以实现这一点,但是我没有找到任何适用于android的库。所以我想在没有图书馆的情况下做。最好的方法是什么?哪一个公式是正确的?我只找到二维空间的公式
ttcibm8c1#
你看过这篇文章吗?它是一个javascript实现,但应该适用于java。一维模糊的计算速度更快。e。g。我们要计算水平模糊。我们计算bh[i,j],bh[i,j+1],bh[i,j+2],。。。。但相邻值bh[i,j]和bh[i,j+1]几乎相同。唯一的区别在于最左边的一个值和最右边的一个值。所以bh[i,j+1]=bh[i,j]+f[i,j+r+1]−f[i,j]−r] 是的。在我们的新算法中,我们将通过创建累加器来计算一维模糊。首先,我们将最左边单元格的值放入其中。然后我们将通过在恒定时间内编辑前一个值来计算下一个值。这种1d模糊的复杂度为o(n)(与r无关)。但是它被执行两次以获得框模糊,这被执行3次以获得高斯模糊。所以这个高斯模糊的复杂度是6*o(n)。
function gaussBlur_4 (scl, tcl, w, h, r) { var bxs = boxesForGauss(r, 3); boxBlur_4 (scl, tcl, w, h, (bxs[0]-1)/2); boxBlur_4 (tcl, scl, w, h, (bxs[1]-1)/2); boxBlur_4 (scl, tcl, w, h, (bxs[2]-1)/2); } function boxBlur_4 (scl, tcl, w, h, r) { for(var i=0; i<scl.length; i++) tcl[i] = scl[i]; boxBlurH_4(tcl, scl, w, h, r); boxBlurT_4(scl, tcl, w, h, r); } function boxBlurH_4 (scl, tcl, w, h, r) { var iarr = 1 / (r+r+1); for(var i=0; i<h; i++) { var ti = i*w, li = ti, ri = ti+r; var fv = scl[ti], lv = scl[ti+w-1], val = (r+1)*fv; for(var j=0; j<r; j++) val += scl[ti+j]; for(var j=0 ; j<=r ; j++) { val += scl[ri++] - fv ; tcl[ti++] = Math.round(val*iarr); } for(var j=r+1; j<w-r; j++) { val += scl[ri++] - scl[li++]; tcl[ti++] = Math.round(val*iarr); } for(var j=w-r; j<w ; j++) { val += lv - scl[li++]; tcl[ti++] = Math.round(val*iarr); } } } function boxBlurT_4 (scl, tcl, w, h, r) { var iarr = 1 / (r+r+1); for(var i=0; i<w; i++) { var ti = i, li = ti, ri = ti+r*w; var fv = scl[ti], lv = scl[ti+w*(h-1)], val = (r+1)*fv; for(var j=0; j<r; j++) val += scl[ti+j*w]; for(var j=0 ; j<=r ; j++) { val += scl[ri] - fv ; tcl[ti] = Math.round(val*iarr); ri+=w; ti+=w; } for(var j=r+1; j<h-r; j++) { val += scl[ri] - scl[li]; tcl[ti] = Math.round(val*iarr); li+=w; ri+=w; ti+=w; } for(var j=h-r; j<h ; j++) { val += lv - scl[li]; tcl[ti] = Math.round(val*iarr); li+=w; ti+=w; } } }
9rbhqvlz2#
在android中使用opencv怎么样。有专门讨论这个主题的书籍和文章。例如android opencv中的高斯低通滤波器。
2条答案
按热度按时间ttcibm8c1#
你看过这篇文章吗?它是一个javascript实现,但应该适用于java。
一维模糊的计算速度更快。e。g。我们要计算水平模糊。我们计算bh[i,j],bh[i,j+1],bh[i,j+2],。。。。但相邻值bh[i,j]和bh[i,j+1]几乎相同。唯一的区别在于最左边的一个值和最右边的一个值。所以bh[i,j+1]=bh[i,j]+f[i,j+r+1]−f[i,j]−r] 是的。
在我们的新算法中,我们将通过创建累加器来计算一维模糊。首先,我们将最左边单元格的值放入其中。然后我们将通过在恒定时间内编辑前一个值来计算下一个值。这种1d模糊的复杂度为o(n)(与r无关)。但是它被执行两次以获得框模糊,这被执行3次以获得高斯模糊。所以这个高斯模糊的复杂度是6*o(n)。
9rbhqvlz2#
在android中使用opencv怎么样。有专门讨论这个主题的书籍和文章。例如
android opencv中的高斯低通滤波器。