1分鐘完成分光Bin劃分——Python自研色區(qū)劃分工具實戰(zhàn))
摘要LED封裝、分光、品質(zhì)工程師日常處理大批量CIE(x,y)色坐標(biāo)數(shù)據(jù)時人工對照圖紙歸類分Bin效率極低且極易出現(xiàn)看錯、分錯問題。本文分享一套純Python開發(fā)的桌面色區(qū)劃分工具無需手動逐點比對導(dǎo)入色坐標(biāo)與標(biāo)準(zhǔn)色區(qū)四邊形后一鍵自動分類同步輸出各Bin數(shù)量、良率占比搭配可視化色坐標(biāo)分布圖最終可導(dǎo)出完整Excel報表。文章完整拆解核心幾何算法叉積法判斷坐標(biāo)點是否位于凸四邊形色區(qū)內(nèi)附帶可直接運行的獨立算法源碼可單獨復(fù)用至其他分光自動化項目。行業(yè)痛點光譜儀導(dǎo)出成百上千組燈珠色坐標(biāo)需要對照客戶標(biāo)準(zhǔn)四邊形色區(qū)人工區(qū)分A/B/C等Bin位。依靠Excel肉眼識圖幾百顆樣品耗時數(shù)十分鐘長期操作傷眼人為誤差無法避免。本工具將幾何判定邏輯程序化批量處理一鍵完成大幅降低分光質(zhì)檢工作量。一、工具解決的核心業(yè)務(wù)場景LED分光分Bin批量匹配色坐標(biāo)與標(biāo)準(zhǔn)四邊形色區(qū)自動統(tǒng)計各Bin產(chǎn)出數(shù)量、良率占比色坐標(biāo)一致性校驗對比實測燈珠分布與標(biāo)準(zhǔn)色區(qū)邊界快速識別批量偏移不良來料/出貨檢驗自動區(qū)分合格色區(qū)、超規(guī)不良點輸出完整統(tǒng)計臺賬標(biāo)準(zhǔn)色區(qū)靈活處理支持整體縮放、均等拆分快速生成多級子Bin用于精細化分光。少量樣品、色區(qū)數(shù)量少時可臨時使用Excel手動處理若樣品量數(shù)百上千、色區(qū)規(guī)格10個以上人工操作成本極高本自動化工具可完美替代人工識圖判斷。二、工具整體介紹基礎(chǔ)信息工具名稱色區(qū)劃分V1.0形態(tài)Windows獨立EXE程序雙擊直接運行無需本地安裝Python環(huán)境技術(shù)架構(gòu)Python Tkinter可視化界面 Matplotlib繪圖幾何判定邏輯獨立封裝為core.py算法模塊Excel讀寫依賴openpyxl/xlrd兼容新舊表格格式核心優(yōu)勢純幾何運算不依賴Office軟件批量自動分類、可視化直觀、結(jié)果一鍵導(dǎo)出底層核心算法凸四邊形點包含判定二維向量叉積法三、數(shù)據(jù)導(dǎo)入支持格式數(shù)據(jù)類型錄入方式補充說明燈珠色坐標(biāo)(x,y)手動錄入界面展示前50行/導(dǎo)入CSV/XLSX/XLS表格僅可視化前50組后臺全量參與運算統(tǒng)計無數(shù)據(jù)上限標(biāo)準(zhǔn)色區(qū)四邊形手動錄入4頂點坐標(biāo)/批量導(dǎo)入表格單個色區(qū)由4個頂點構(gòu)成凸四邊形最多支持15組獨立色區(qū)基準(zhǔn)色區(qū)手動錄入/文件導(dǎo)入繪圖區(qū)分紅色虛線展示支持雙向縮放、均等拆分生成子色區(qū)頂點排序規(guī)則錄入色區(qū)四點無需嚴格控制順逆時針工具內(nèi)置極角重排邏輯自動以X坐標(biāo)最小點為起點剩余三點按極角逆時針排序保證四邊形判定邏輯穩(wěn)定生效。四、完整功能清單色坐標(biāo)錄入支持手動填寫與文件導(dǎo)入雙模式兼容CSV、XLS、XLSX三種主流分光導(dǎo)出格式兩列數(shù)據(jù)僅需X、Y色坐標(biāo)。多色區(qū)定義最多配置15個獨立凸四邊形色區(qū)支持單條錄入、表格批量導(dǎo)入適配多Bin分光標(biāo)準(zhǔn)。基準(zhǔn)色區(qū)專屬處理功能縮放沿色區(qū)橫向/縱向雙向放大、縮小快速對比標(biāo)準(zhǔn)邊界偏移拆分將整塊色區(qū)均等切分為1~10份子色區(qū)實現(xiàn)精細化分級分光。一鍵自動分類運算點擊運行即可批量判定每一組色坐標(biāo)歸屬Bin界面表格實時回填分類結(jié)果同步匯總各Bin數(shù)量、占比、超規(guī)不良數(shù)量、總樣品數(shù)。CIE色坐標(biāo)可視化繪圖等比例坐標(biāo)系自動適配數(shù)據(jù)范圍各色區(qū)填充區(qū)分色標(biāo)注名稱基準(zhǔn)色區(qū)使用紅色虛線框已分類燈珠按所屬Bin上色未判定原始點灰色展示批量分布好壞一目了然。Excel報表一鍵導(dǎo)出輸出完整XLSX文件包含兩大模塊①單顆燈珠明細序號、X、Y、歸屬Bin②各Bin數(shù)量、占比匯總統(tǒng)計表可直接用于品質(zhì)歸檔、客戶交付。五、核心底層算法叉積法判斷點是否在凸四邊形色區(qū)內(nèi)工具核心邏輯輸入單個色坐標(biāo)點P、四邊形4頂點通過二維向量叉積判斷點相對四條有向邊的方位實現(xiàn)快速包含判定。算法原理二維叉積公式給定原點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左側(cè)逆時針cross0點B在向量OA右側(cè)順時針cross≈0三點共線點落在四邊形邊界上凸四邊形判定規(guī)則四邊形頂點統(tǒng)一逆時針/順時針環(huán)繞依次計算待測點對四條邊的叉積全部叉積≥極小閾值ε1e-12點在四邊形內(nèi)部或邊界全部叉積≤極小閾值ε兼容順時針頂點排布同樣判定為內(nèi)部兩種條件滿足其一即判定點在色區(qū)內(nèi)ε用于規(guī)避浮點精度誤差導(dǎo)致邊界點誤判。核心算法代碼示意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# 返回第一個命中的色區(qū)returnNone# 都不在 → 色區(qū)外defclassify_all_points(points,regions):return[(p[0],p[1],classify_point(p,regions))forpinpoints]算法選型說明選用叉積法而非射線法的原因LED標(biāo)準(zhǔn)色區(qū)全部為規(guī)整凸四邊形叉積僅需4次運算計算量更小、運行速度更快代碼簡潔穩(wěn)定無復(fù)雜邊界判斷內(nèi)置順逆時針兼容邏輯降低用戶錄入頂點的操作門檻。補充若后續(xù)需要處理異形凹多邊形色區(qū)可替換為射線法/環(huán)繞數(shù)算法。整套邏輯就是對每種數(shù)據(jù)讀入 → 幾何判定 → 寫回/統(tǒng)計。最小可用版教學(xué)用覆蓋點-色區(qū)判定與批量分類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)# 示例一個色區(qū) 幾個點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,在色區(qū)內(nèi)ifpoint_in_quad(p,region)else色區(qū)外)真實工具把判定放在獨立的core.pyGUItkinter只負責(zé)輸入、繪圖matplotlib和導(dǎo)出openpyxl——職責(zé)分離算法可單獨測試復(fù)用。六、完整操作流程錄入標(biāo)準(zhǔn)色區(qū)右側(cè)面板手動輸入每個Bin的4個頂點或?qū)隕xcel/Csv批量加載最多支持15組色區(qū)可選基準(zhǔn)色區(qū)調(diào)整導(dǎo)入基準(zhǔn)色區(qū)四邊形按需縮放邊界或均等拆分為多組子Bin導(dǎo)入實測色坐標(biāo)左側(cè)面板導(dǎo)入光譜儀導(dǎo)出表格或手動錄入少量測試坐標(biāo)執(zhí)行分類運算點擊運行表格實時回填每顆燈珠歸屬Bin下方面板自動統(tǒng)計各Bin數(shù)量、占比、不良總數(shù)可視化校驗查看CIE色坐標(biāo)分布圖區(qū)分各色區(qū)顏色快速判斷批量偏移、不良集中區(qū)域?qū)С鰵w檔報表一鍵導(dǎo)出XLSX文件包含明細數(shù)據(jù)與匯總統(tǒng)計表用于品質(zhì)記錄、客戶對賬。使用注意事項各標(biāo)準(zhǔn)色區(qū)四邊形盡量避免重疊若存在重疊區(qū)域色坐標(biāo)會優(yōu)先匹配先錄入的色區(qū)定義順序會影響分類結(jié)果。七、使用避坑要點色區(qū)邊界要求工具判定邏輯僅適配凸四邊形LED行業(yè)分光標(biāo)準(zhǔn)均為凸區(qū)域無誤判風(fēng)險凹四邊形、自交多邊形會出現(xiàn)判定錯誤界面表格限制界面僅展示前50組色坐標(biāo)用于預(yù)覽后臺完整讀取全部數(shù)據(jù)運算不會丟失樣品運行依賴說明源碼本地運行時core.py與主程序需放在同一文件夾打包EXE已內(nèi)置全部依賴無需額外配置浮點精度處理內(nèi)置1e-12容差邊界上的色坐標(biāo)不會被誤判為不良適配儀器測量微小波動軟件依賴庫Tkinter、Matplotlib、openpyxl、xlrd標(biāo)準(zhǔn)Python環(huán)境可一鍵pip安裝。八、工具落地價值總結(jié)本工具完整解決LED分光人工分Bin的低效痛點對比傳統(tǒng)人工識圖具備四大優(yōu)勢批量極速處理上千組色坐標(biāo)一分鐘完成全部分類替代半小時以上人工操作數(shù)據(jù)零誤差幾何算法統(tǒng)一判定標(biāo)準(zhǔn)消除人眼識別偏差可視化輔助分析分布圖直觀呈現(xiàn)樣品整體分布批量色差、偏移問題一眼定位報表自動生成明細、良率匯總一鍵導(dǎo)出省去手工統(tǒng)計、制表工作色區(qū)靈活調(diào)整支持縮放、拆分基準(zhǔn)色區(qū)適配客戶各類細分分光標(biāo)準(zhǔn)。如果你也??ㄔ谝慌鴺?biāo)要判斷 Bin這一步不想自己搭環(huán)境、不想寫判定代碼可以私信我聊聊——工具是桌面版需要的話我發(fā)你包和用法。也歡迎關(guān)注我后續(xù)還會寫更多把重復(fù)活交給軟件的自研小工具實戰(zhàn)。