const getV=require('./getV')
const numTobase62=require('./numTobase62')
function getUniformLBPMap() {
const map={}
let index=0;
for(let i=0;i<256;i++){
let str=i.toString(2);
str='0'.repeat(8-str.length)+str;
let first=str[0]
let count=0
for(let j=1;j<str.length;j++){
if(first!==str[j]){
first=str[j];
count++
}
}
if(count<3){
map[str]=index++;
}else{
map[str]=58
}
}
return map;
}
const uniformLBPMap=getUniformLBPMap()
function getLbpData(grayData) {
const posArr=[
[-1,-1],
[0,-1],
[1,-1],
[1,0],
[1,1],
[0,1],
[-1,1],
[-1,0],
]
const rect={
width:grayData.width,
height:grayData.height,
data:[]
}
for(let y=0;y<grayData.height;y++){
for(let x=0;x<grayData.width;x++){
const v1=getV(x,y,grayData);
const arr= posArr.map(function (arr) {
const v2=getV(arr[0]+x,arr[1]+y,grayData);
if(v2>v1){
return 1
}else{
return 0
}
})
rect.data.push(parseInt(arr.join(''),2))
}
}
return rect;
}
function getUniformLbpData(grayData) {
const posArr=[
[-1,-1],
[0,-1],
[1,-1],
[1,0],
[1,1],
[0,1],
[-1,1],
[-1,0],
]
const rect={
width:grayData.width,
height:grayData.height,
data:[]
}
for(let y=0;y<grayData.height;y++){
for(let x=0;x<grayData.width;x++){
const v1=getV(x,y,grayData);
const arr= posArr.map(function (arr) {
const v2=getV(arr[0]+x,arr[1]+y,grayData);
if(v2>v1){
return 1
}else{
return 0
}
})
const num=uniformLBPMap[arr.join('')]
rect.data.push(numTobase62[num])
}
}
return rect;
}
module.exports={
getLbpData,getUniformLbpData
}