获取图像lbp特征

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
}

  

posted @ 2021-11-26 19:11  无工时代  阅读(29)  评论(0编辑  收藏  举报