几百个LED灯珠色坐标1分钟完成分光Bin划分——Python自研色区划分工具实战

几百个LED灯珠色坐标1分钟完成分光Bin划分——Python自研色区划分工具实战 摘要LED封装、分光、品质工程师日常处理大批量CIE(x,y)色坐标数据时人工对照图纸归类分Bin效率极低且极易出现看错、分错问题。本文分享一套纯Python开发的桌面色区划分工具无需手动逐点比对导入色坐标与标准色区四边形后一键自动分类同步输出各Bin数量、良率占比搭配可视化色坐标分布图最终可导出完整Excel报表。文章完整拆解核心几何算法叉积法判断坐标点是否位于凸四边形色区内附带可直接运行的独立算法源码可单独复用至其他分光自动化项目。行业痛点光谱仪导出成百上千组灯珠色坐标需要对照客户标准四边形色区人工区分A/B/C等Bin位。依靠Excel肉眼识图几百颗样品耗时数十分钟长期操作伤眼人为误差无法避免。本工具将几何判定逻辑程序化批量处理一键完成大幅降低分光质检工作量。一、工具解决的核心业务场景LED分光分Bin批量匹配色坐标与标准四边形色区自动统计各Bin产出数量、良率占比色坐标一致性校验对比实测灯珠分布与标准色区边界快速识别批量偏移不良来料/出货检验自动区分合格色区、超规不良点输出完整统计台账标准色区灵活处理支持整体缩放、均等拆分快速生成多级子Bin用于精细化分光。少量样品、色区数量少时可临时使用Excel手动处理若样品量数百上千、色区规格10个以上人工操作成本极高本自动化工具可完美替代人工识图判断。二、工具整体介绍基础信息工具名称色区划分V1.0形态Windows独立EXE程序双击直接运行无需本地安装Python环境技术架构Python Tkinter可视化界面 Matplotlib绘图几何判定逻辑独立封装为core.py算法模块Excel读写依赖openpyxl/xlrd兼容新旧表格格式核心优势纯几何运算不依赖Office软件批量自动分类、可视化直观、结果一键导出底层核心算法凸四边形点包含判定二维向量叉积法三、数据导入支持格式数据类型录入方式补充说明灯珠色坐标(x,y)手动录入界面展示前50行/导入CSV/XLSX/XLS表格仅可视化前50组后台全量参与运算统计无数据上限标准色区四边形手动录入4顶点坐标/批量导入表格单个色区由4个顶点构成凸四边形最多支持15组独立色区基准色区手动录入/文件导入绘图区分红色虚线展示支持双向缩放、均等拆分生成子色区顶点排序规则录入色区四点无需严格控制顺逆时针工具内置极角重排逻辑自动以X坐标最小点为起点剩余三点按极角逆时针排序保证四边形判定逻辑稳定生效。四、完整功能清单色坐标录入支持手动填写与文件导入双模式兼容CSV、XLS、XLSX三种主流分光导出格式两列数据仅需X、Y色坐标。多色区定义最多配置15个独立凸四边形色区支持单条录入、表格批量导入适配多Bin分光标准。基准色区专属处理功能缩放沿色区横向/纵向双向放大、缩小快速对比标准边界偏移拆分将整块色区均等切分为1~10份子色区实现精细化分级分光。一键自动分类运算点击运行即可批量判定每一组色坐标归属Bin界面表格实时回填分类结果同步汇总各Bin数量、占比、超规不良数量、总样品数。CIE色坐标可视化绘图等比例坐标系自动适配数据范围各色区填充区分色标注名称基准色区使用红色虚线框已分类灯珠按所属Bin上色未判定原始点灰色展示批量分布好坏一目了然。Excel报表一键导出输出完整XLSX文件包含两大模块①单颗灯珠明细序号、X、Y、归属Bin②各Bin数量、占比汇总统计表可直接用于品质归档、客户交付。五、核心底层算法叉积法判断点是否在凸四边形色区内工具核心逻辑输入单个色坐标点P、四边形4顶点通过二维向量叉积判断点相对四条有向边的方位实现快速包含判定。算法原理二维叉积公式给定原点O、两点P1、P2叉积计算c r o s s ( O , P 1 , P 2 ) ( P 1 x − O x ) ( P 2 y − O y ) − ( P 1 y − O y ) ( P 2 x − O x ) cross(O,P1,P2)(P1_x-O_x)(P2_y-O_y)-(P1_y-O_y)(P2_x-O_x)cross(O,P1,P2)(P1x​−Ox​)(P2y​−Oy​)−(P1y​−Oy​)(P2x​−Ox​)cross0点B在向量OA左侧逆时针cross0点B在向量OA右侧顺时针cross≈0三点共线点落在四边形边界上凸四边形判定规则四边形顶点统一逆时针/顺时针环绕依次计算待测点对四条边的叉积全部叉积≥极小阈值ε1e-12点在四边形内部或边界全部叉积≤极小阈值ε兼容顺时针顶点排布同样判定为内部两种条件满足其一即判定点在色区内ε用于规避浮点精度误差导致边界点误判。核心算法代码示意defpoint_in_convex_quad(p,quad):defcross(o,a,b):return(a[0]-o[0])*(b[1]-o[1])-(a[1]-o[1])*(b[0]-o[0])nlen(quad)ifn3:returnFalsesigns[cross(quad[i],quad[(i1)%n],p)-1e-12foriinrange(n)]returnall(signs)ornotany(signs)defclassify_point(point,regions):forname,quadinregions:ifpoint_in_convex_quad(point,quad):returnname# 返回第一个命中的色区returnNone# 都不在 → 色区外defclassify_all_points(points,regions):return[(p[0],p[1],classify_point(p,regions))forpinpoints]算法选型说明选用叉积法而非射线法的原因LED标准色区全部为规整凸四边形叉积仅需4次运算计算量更小、运行速度更快代码简洁稳定无复杂边界判断内置顺逆时针兼容逻辑降低用户录入顶点的操作门槛。补充若后续需要处理异形凹多边形色区可替换为射线法/环绕数算法。整套逻辑就是对每种数据读入 → 几何判定 → 写回/统计。最小可用版教学用覆盖点-色区判定与批量分类importmathdefreorder_quad(pts):ptssorted(pts,keylambdap:(p[0],p[1]))p1pts[0]otherssorted(pts[1:],keylambdap:math.atan2(p[1]-p1[1],p[0]-p1[0]))return[p1]othersdefpoint_in_quad(p,quad):defcross(o,a,b):return(a[0]-o[0])*(b[1]-o[1])-(a[1]-o[1])*(b[0]-o[0])s[cross(quad[i],quad[(i1)%4],p)-1e-12foriinrange(4)]returnall(s)ornotany(s)# 示例一个色区 几个点regionreorder_quad([(0.30,0.34),(0.36,0.34),(0.36,0.42),(0.30,0.42)])pts[(0.33,0.38),(0.50,0.50),(0.32,0.36)]forpinpts:print(p,在色区内ifpoint_in_quad(p,region)else色区外)真实工具把判定放在独立的core.pyGUItkinter只负责输入、绘图matplotlib和导出openpyxl——职责分离算法可单独测试复用。六、完整操作流程录入标准色区右侧面板手动输入每个Bin的4个顶点或导入Excel/Csv批量加载最多支持15组色区可选基准色区调整导入基准色区四边形按需缩放边界或均等拆分为多组子Bin导入实测色坐标左侧面板导入光谱仪导出表格或手动录入少量测试坐标执行分类运算点击运行表格实时回填每颗灯珠归属Bin下方面板自动统计各Bin数量、占比、不良总数可视化校验查看CIE色坐标分布图区分各色区颜色快速判断批量偏移、不良集中区域导出归档报表一键导出XLSX文件包含明细数据与汇总统计表用于品质记录、客户对账。使用注意事项各标准色区四边形尽量避免重叠若存在重叠区域色坐标会优先匹配先录入的色区定义顺序会影响分类结果。七、使用避坑要点色区边界要求工具判定逻辑仅适配凸四边形LED行业分光标准均为凸区域无误判风险凹四边形、自交多边形会出现判定错误界面表格限制界面仅展示前50组色坐标用于预览后台完整读取全部数据运算不会丢失样品运行依赖说明源码本地运行时core.py与主程序需放在同一文件夹打包EXE已内置全部依赖无需额外配置浮点精度处理内置1e-12容差边界上的色坐标不会被误判为不良适配仪器测量微小波动软件依赖库Tkinter、Matplotlib、openpyxl、xlrd标准Python环境可一键pip安装。八、工具落地价值总结本工具完整解决LED分光人工分Bin的低效痛点对比传统人工识图具备四大优势批量极速处理上千组色坐标一分钟完成全部分类替代半小时以上人工操作数据零误差几何算法统一判定标准消除人眼识别偏差可视化辅助分析分布图直观呈现样品整体分布批量色差、偏移问题一眼定位报表自动生成明细、良率汇总一键导出省去手工统计、制表工作色区灵活调整支持缩放、拆分基准色区适配客户各类细分分光标准。如果你也常卡在一批色坐标要判断 Bin这一步不想自己搭环境、不想写判定代码可以私信我聊聊——工具是桌面版需要的话我发你包和用法。也欢迎关注我后续还会写更多把重复活交给软件的自研小工具实战。