Я пытаюсь реализовать Bradley Adaptive thresholding. Я знаю, что в одном из вопросов переполнения стека есть код python. Но я изо всех сил пытаюсь реализовать то же самое в JS, следуя этому. Кто-нибудь может мне помочь, пожалуйста! Пока что мой код:Javascript Bradley адаптивная реализация порога
function computeAdaptiveThreshold (imagetest,imageWidth,imageHeight,callback)
{
var size = imageWidth*imageHeight*4;
var s = imageWidth/8;
var s2=s>>1;
var t=0.15;
var it=1.0-t;
var i,j,diff,x1,y1,x2,y2,ind1,ind2,ind3;
var sum=0;
var ind=0;
var integralImg = [];
var canvas = document.createElement('canvas');
var bin = canvas.getContext('2d').createImageData(imageWidth, imageHeight);
for(i=0;i<imageWidth;i++)
{
sum = 0;
for(j=0;j<imageHeight;j++)
{
index = i *imageHeight + j;
sum += imagetest.data[index];
if(i== 0)
{
integralImg[index] = sum;
}
else
{
//index = (i-1) * height + j;
integralImg[index] = integralImg[(i-1) * imageHeight + j] + sum;
}
}
}
x1=0;
for(i=1;i<imageWidth;++i)
{
sum=0;
ind=i;
ind3=ind-s2;
if(i>s)
{
x1=i-s;
}
diff=i-x1;
for(j=0;j<imageHeight;++j)
{
sum+=imagetest.data[ind];// & 0xFF;
integralImg[ind] = integralImg[(ind-1)]+sum;
ind+=imageWidth;
if(i<s2)continue;
if(j<s2)continue;
y1=(j<s ? 0 : j-s);
ind1=y1*imageWidth;
ind2=j*imageWidth;
if (((imagetest.data[ind3])*(diff * (j - y1))) < ((integralImg[(ind2 + i)] - integralImg[(ind1 + i)] - integralImg[(ind2 + x1)] + integralImg[(ind1 + x1)])*it)) {
bin.data[ind3] = 0;
} else {
bin.data[ind3] = 255;
}
ind3 += imageWidth;
}
}
y1 = 0;
for(j = 0; j < imageHeight; ++j)
{
i = 0;
y2 =imageHeight- 1;
if(j <imageHeight- s2)
{
i = imageWidth - s2;
y2 = j + s2;
}
ind = j * imageWidth + i;
if(j > s2) y1 = j - s2;
ind1 = y1 * imageWidth;
ind2 = y2 * imageWidth;
diff = y2 - y1;
for(; i < imageWidth; ++i, ++ind)
{
x1 = (i < s2 ? 0 : i - s2);
x2 = i + s2;
// check the border
if (x2 >= imageWidth) x2 = imageWidth - 1;
if (((imagetest.data[ind])*((x2 - x1) * diff)) < ((integralImg[(ind2 + x2)] - integralImg[(ind1 + x2)] - integralImg[(ind2 + x1)] + integralImg[(ind1 + x1)])*it)) {
bin.data[ind] = 0;
} else {
bin.data[ind] = 255;
}
}
}
callback(bin);`
Я получаю очень плохие изображения. Я должен сказать, что я не могу назвать это образ.
Вы лечение RGBA изображения, как если бы это было ч/б изображения. Это корень вашей проблемы. – GameAlchemist
Привет GameAlchemist спасибо за комментарий. Но мой тест изображения - это серое изображение. Вы говорите, что мне нужно использовать изображение без учета альфа-компонента, такого как Android RGB_565? Я также добавил свой обновленный код. Заранее спасибо – thegeek