Ai
1 Star 0 Fork 0

李明/captchaidentify

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
otsu.js 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
/**
*
* @param {ImageData} imageData
* @param {Number} size 峰值代表背景色,背景色偏移多少个的值0
* @returns
*/
module.exports = function otsu(imageData, size = 2) {
const grayPixelInfo = []; // 每个灰度值的信息的集合 {size: 像素总数, ratio: 概论}
let threshold;
for (i = 0; i < 256; i++) {
grayPixelInfo[i] = { pixelSize: 0, pixelRatio: 0 };
}
const data = imageData.data;
const pixelTotal = data.length;
for (i = 0; i < pixelTotal; i += 4) {
//获取r的像素值,因为灰度图像,r=g=b,所以取第一个即可
const key = data[i];
grayPixelInfo[key].pixelSize++;
}
let imageSize = imageData.width * imageData.height;
let maxPixel = 0;
let maxGray = 0;
for (let i = 0; i < 256; i++) {
if( grayPixelInfo[i].pixelSize > maxPixel){
maxPixel = grayPixelInfo[i].pixelSize;
maxGray = i;
}
}
for(let i = -size ; i <= size; i++){
if(maxGray + i >= 0 && maxGray + i <= 255){
imageSize-=grayPixelInfo[maxGray + i].pixelSize;
grayPixelInfo[maxGray + i].pixelSize = 0;
}
}
for (i = 0; i < 256; i++) {
grayPixelInfo[i].pixelRatio = grayPixelInfo[i].pixelSize / imageSize;
}
// 去掉波峰的值,
let maxVariance = 0;
for (let i = 0; i < 256; i++) {
let probabilityFront = 0;
let probabilityBack = 0;
let avagerGrayFront = 0;
let avagerGrayBack = 0;
grayPixelInfo.slice(0, i).forEach(el => {
probabilityFront += el.pixelRatio;
avagerGrayFront += el.pixelRatio * el.pixelSize
})
grayPixelInfo.slice(i + 1).forEach(el => {
probabilityBack += el.pixelRatio;
avagerGrayBack += el.pixelRatio * el.pixelSize
})
if (probabilityFront === 0 || probabilityBack === 0) {
continue;
}
avagerGrayFront = avagerGrayFront / probabilityFront;
avagerGrayBack = avagerGrayBack / probabilityBack;
const variance = probabilityFront * probabilityBack * (avagerGrayFront - avagerGrayBack) * (avagerGrayFront - avagerGrayBack)
if (variance > maxVariance) {
maxVariance = variance;
threshold = i;
}
}
return{
threshold: threshold,
variance: maxVariance,
histogram: grayPixelInfo,
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/usernameisregistered/captchaidentify.git
git@gitee.com:usernameisregistered/captchaidentify.git
usernameisregistered
captchaidentify
captchaidentify
master

搜索帮助