import cv2,OpenEXR,Imath
import numpy as β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅
from edt import edt
β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅='κ¨ΠκΌ..π£ βͺα±α΄α€α¦α©αβ΅π£β€ααα±α΄β€βͺπ’βͺπβͺπ’βͺβ€α±α΄ααβ€π£β΅αα©α€α¦α±α΄βͺπ£ ..PNG'
β΅α±α΄α€α¦α©ακ΄γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ΄αα©α€α¦α±α΄β΅=cv2.imdecode(β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.fromfile(β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅,β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.uint8),cv2.IMREAD_COLOR)
β΅α±α΄αα©ααααδΊΊα©α΄₯α€α¦γOπ§·γβα±α΄π§·α±α΄α±ΠNOααγα±α΄α€α¦α©ακ΄γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ΄αα©α€α¦α±α΄γααOΠNα±α±α΄π§·α±α΄βγπ§·Oγα€α¦α΄₯α©δΊΊααααα©αα±α΄β΅=cv2.cvtColor(β΅α±α΄α€α¦α©ακ΄γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ΄αα©α€α¦α±α΄β΅,cv2.COLOR_BGR2GRAY)
β΅ΠNα΄₯απ§·α±α΄α΄₯β΅γβ΅γβ΅α΄₯α±α΄π§·αα΄₯ΠNβ΅,β΅βαOμ·ααα±α΄α΄₯μ·π§·β΅γβ΅γβ΅π§·μ·α΄₯α±α΄ααμ·Oαββ΅=cv2.threshold(β΅α±α΄αα©ααααδΊΊα©α΄₯α€α¦γOπ§·γβα±α΄π§·α±α΄α±ΠNOααγα±α΄α€α¦α©ακ΄γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ΄αα©α€α¦α±α΄γααOΠNα±α±α΄π§·α±α΄βγπ§·Oγα€α¦α΄₯α©δΊΊααααα©αα±α΄β΅,127,255,cv2.THRESH_BINARY)
β΅α΄₯α±α΄8ααΠNγαα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αγΠNαα8α±α΄α΄₯β΅,β΅αααα±α΄ααγα±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄γααα±α΄αααβ΅,β΅αααακ΄π§·αακ΄π§·α©π§·ααγαααα±α΄ααγα±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄γααα±α΄αααγααπ§·α©π§·κ΄ααπ§·κ΄ααααβ΅,β΅ααβκ΄Oα΄₯π§·ΠNα±α΄ααγαααα±α΄ααγα±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄γααα±α΄αααγααα±α΄ΠNπ§·α΄₯Oκ΄βααβ΅=cv2.connectedComponentsWithStats(β΅βαOμ·ααα±α΄α΄₯μ·π§·β΅γβ΅γβ΅π§·μ·α΄₯α±α΄ααμ·Oαββ΅)
β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.zeros_like(β΅αααα±α΄ααγα±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄γααα±α΄αααβ΅)
for i in range(1,β΅α΄₯α±α΄8ααΠNγαα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αγΠNαα8α±α΄α΄₯β΅):β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅[β΅αααα±α΄ααγα±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄γααα±α΄αααβ΅==i]=i
β΅αα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγΠNα©α±α΄βκ΄ααααα±α΄β΅γβ΅γβ΅α±α΄αααακ΄βα±α΄α©ΠNγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αβ΅=edt(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅.astype(β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.float32))
β΅ααα±α΄ΠNαα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αΠNα±α΄ααβ΅='Β·'
β΅α΄₯Oπ§·ααα©κ³β΅α±α΄ααΠNα©π§·αακ΄ββ΅π§·ΠNα±α΄κ΄βα©α΄₯α€α¦β΅ααακ΄κ€α©αβ΅γβ΅γβ΅αα©κ€κ΄αααβ΅α€α¦α΄₯α©βκ΄α±α΄ΠNπ§·β΅βκ΄ααπ§·α©ΠNααα±α΄β΅κ³α©ααπ§·Oα΄₯β΅=2/4.793447 # 2/5.5625 # 1/27**1/β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.cbrt(2)
β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅,β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅=β΅α±α΄α€α¦α©ακ΄γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ΄αα©α€α¦α±α΄β΅.shape[:2]
β΅α±α΄ααΠNα©π§·αακ΄ββ΅π§·ΠNα±α΄κ΄βα©α΄₯α€α¦β΅ααακ΄κ€α©αβ΅γβ΅γβ΅αα©κ€κ΄αααβ΅α€α¦α΄₯α©βκ΄α±α΄ΠNπ§·β΅βκ΄ααπ§·α©ΠNααα±α΄β΅=int(max(β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅,β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅)*β΅α΄₯Oπ§·ααα©κ³β΅α±α΄ααΠNα©π§·αακ΄ββ΅π§·ΠNα±α΄κ΄βα©α΄₯α€α¦β΅ααακ΄κ€α©αβ΅γβ΅γβ΅αα©κ€κ΄αααβ΅α€α¦α΄₯α©βκ΄α±α΄ΠNπ§·β΅βκ΄ααπ§·α©ΠNααα±α΄β΅κ³α©ααπ§·Oα΄₯β΅)
β΅βαOμ·ααα±α΄α΄₯μ·π§·β΅π§·ΠNαOααβ΅αα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αβ΅ααOαΠNπ§·β΅π§·μ·α΄₯α±α΄ααμ·Oαββ΅=min(β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅,β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅)*64
β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.zeros_like(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅,dtype=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.float32)
if β΅ααα±α΄ΠNαα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αΠNα±α΄ααβ΅=='β΅':
for i in range(1,β΅α΄₯α±α΄8ααΠNγαα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αγΠNαα8α±α΄α΄₯β΅):
β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅=(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅==i)
β΅α±α΄ααΠNα©π§·αακ΄βγπ§·ΠNα±α΄κ΄βα©α΄₯α€α¦γαα±α΄ααγβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγααα±α΄αγα€α¦α΄₯α©βκ΄α±α΄ΠNπ§·γβκ΄ααπ§·α©ΠNααα±α΄β΅=β΅αα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγΠNα©α±α΄βκ΄ααααα±α΄β΅γβ΅γβ΅α±α΄αααακ΄βα±α΄α©ΠNγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αβ΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]
β΅α±α΄ααΠNα©π§·αακ΄βγααακ΄κ€α©αγπ§·ΠNα±α΄κ΄βα©α΄₯α€α¦γαααα±α΄ααγβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγααα±α΄αααγα€α¦α΄₯α©βκ΄α±α΄ΠNπ§·γαα©κ€κ΄αααγβκ΄ααπ§·α©ΠNααα±α΄β΅=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.max(β΅α±α΄ααΠNα©π§·αακ΄βγπ§·ΠNα±α΄κ΄βα©α΄₯α€α¦γαα±α΄ααγβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγααα±α΄αγα€α¦α΄₯α©βκ΄α±α΄ΠNπ§·γβκ΄ααπ§·α©ΠNααα±α΄β΅)
β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.clip(β΅α±α΄ααΠNα©π§·αακ΄βγπ§·ΠNα±α΄κ΄βα©α΄₯α€α¦γαα±α΄ααγβα±α΄αα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αα±α΄βγααα±α΄αγα€α¦α΄₯α©βκ΄α±α΄ΠNπ§·γβκ΄ααπ§·α©ΠNααα±α΄β΅,0,β΅α±α΄ααΠNα©π§·αακ΄ββ΅π§·ΠNα±α΄κ΄βα©α΄₯α€α¦β΅ααακ΄κ€α©αβ΅γβ΅γβ΅αα©κ€κ΄αααβ΅α€α¦α΄₯α©βκ΄α±α΄ΠNπ§·β΅βκ΄ααπ§·α©ΠNααα±α΄β΅)/β΅α±α΄ααΠNα©π§·αακ΄ββ΅π§·ΠNα±α΄κ΄βα©α΄₯α€α¦β΅ααακ΄κ€α©αβ΅γβ΅γβ΅αα©κ€κ΄αααβ΅α€α¦α΄₯α©βκ΄α±α΄ΠNπ§·β΅βκ΄ααπ§·α©ΠNααα±α΄β΅
elif β΅ααα±α΄ΠNαα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αΠNα±α΄ααβ΅=="Β·":
for i in range(1,β΅α΄₯α±α΄8ααΠNγαα±α΄8α©αβ΅γβ΅γβ΅αα©8α±α΄αγΠNαα8α±α΄α΄₯β΅):
β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅=(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅==i)
if β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.sum(β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅)>β΅βαOμ·ααα±α΄α΄₯μ·π§·β΅π§·ΠNαOααβ΅αα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αβ΅ααOαΠNπ§·β΅π§·μ·α΄₯α±α΄ααμ·Oαββ΅:
β΅α±α΄ααΠNα©π§·αακ΄βγπ§·ΠNα±α΄κ΄βα©α΄₯α€α¦γβα±α΄ί¦κ΄αααβ΅γβ΅γβ΅ααακ΄ί¦α±α΄βγα€α¦α΄₯α©βκ΄α±α΄ΠNπ§·γβκ΄ααπ§·α©ΠNααα±α΄β΅=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.clip(β΅αα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγΠNα©α±α΄βκ΄ααααα±α΄β΅γβ΅γβ΅α±α΄αααακ΄βα±α΄α©ΠNγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αβ΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]/β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.max(β΅αα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγΠNα©α±α΄βκ΄ααααα±α΄β΅γβ΅γβ΅α±α΄αααακ΄βα±α΄α©ΠNγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αβ΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]),0,β΅α΄₯Oπ§·ααα©κ³β΅α±α΄ααΠNα©π§·αακ΄ββ΅π§·ΠNα±α΄κ΄βα©α΄₯α€α¦β΅ααακ΄κ€α©αβ΅γβ΅γβ΅αα©κ€κ΄αααβ΅α€α¦α΄₯α©βκ΄α±α΄ΠNπ§·β΅βκ΄ααπ§·α©ΠNααα±α΄β΅κ³α©ααπ§·Oα΄₯β΅)
β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]=cv2.normalize(β΅α±α΄ααΠNα©π§·αακ΄βγπ§·ΠNα±α΄κ΄βα©α΄₯α€α¦γβα±α΄ί¦κ΄αααβ΅γβ΅γβ΅ααακ΄ί¦α±α΄βγα€α¦α΄₯α©βκ΄α±α΄ΠNπ§·γβκ΄ααπ§·α©ΠNααα±α΄β΅[:,β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.newaxis],None,0,1,cv2.NORM_MINMAX).flatten()
else:
β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]=β΅αα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγΠNα©α±α΄βκ΄ααααα±α΄β΅γβ΅γβ΅α±α΄αααακ΄βα±α΄α©ΠNγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αβ΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅]/β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.max(β΅αα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγΠNα©α±α΄βκ΄ααααα±α΄β΅γβ΅γβ΅α±α΄αααακ΄βα±α΄α©ΠNγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αβ΅[β΅πααα©αβ΅γβ΅γβ΅αα©ααπβ΅])
β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααγπ§·κ΄8γπΒ·β΅γβ΅γβ΅Β·πγ8κ΄π§·γαααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅=(β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅*65535).astype(β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.uint16)
def β΅α΄₯κ€α±α΄γα±α΄π§·α©α΄₯α±α΄ΠNα±α΄α€α¦β΅γβ΅γβ΅α€α¦α±α΄ΠNα±α΄α΄₯α©π§·α±α΄γα±α΄κ€α΄₯β΅(β΅α±α΄αα©ΠNγα±α΄ακ΄κ³β΅γβ΅γβ΅κ³κ΄αα±α΄γΠNα©αα±α΄β΅,β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅):
if β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅.ndim==2:
β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅,β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅=β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅.shape
β΅αα±α΄ΠNα©μ·ααγα©μ·ί¦αα©β΅γβ΅γβ΅α©αί¦μ·α©γααμ·α©ΠNα±α΄αβ΅=β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅/β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.max(β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅)
β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅=β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.stack((β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅,)*3+(β΅αα±α΄ΠNα©μ·ααγα©μ·ί¦αα©β΅γβ΅γβ΅α©αί¦μ·α©γααμ·α©ΠNα±α΄αβ΅,),axis=-1)
elif β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅.ndim==3 and β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅.shape[2]==4:
β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅,β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅,β΅αααα±α΄ΠNα©μ·ααβ΅γβ΅γβ΅ααμ·α©ΠNα±α΄αααβ΅=β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅.shape
else:
raise ValueError("")
β΅α±α΄ί¦δΊΊπ§·γαα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αγπ§·δΊΊί¦α±α΄β΅=Imath.PixelType(Imath.PixelType.FLOAT)
β΅α΄₯α±α΄βα©α±α΄μ·β΅γβ΅γβ΅μ·α±α΄α©βα±α΄α΄₯β΅=OpenEXR.Header(β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅,β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅)
β΅α΄₯α±α΄βα©α±α΄μ·β΅γβ΅γβ΅μ·α±α΄α©βα±α΄α΄₯β΅['β΅αααα±α΄ΠNα©μ·ααβ΅γβ΅γβ΅ααμ·α©ΠNα±α΄αααβ΅']={
'R':Imath.Channel(β΅α±α΄ί¦δΊΊπ§·γαα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αγπ§·δΊΊί¦α±α΄β΅),
'G':Imath.Channel(β΅α±α΄ί¦δΊΊπ§·γαα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αγπ§·δΊΊί¦α±α΄β΅),
'B':Imath.Channel(β΅α±α΄ί¦δΊΊπ§·γαα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αγπ§·δΊΊί¦α±α΄β΅),
'A':Imath.Channel(β΅α±α΄ί¦δΊΊπ§·γαα±α΄κ€κ΄ί¦β΅γβ΅γβ΅ί¦κ΄κ€α±α΄αγπ§·δΊΊί¦α±α΄β΅)
}
β΅α±α΄ακ΄κ³γπ§·αί¦π§·αOβ΅γβ΅γβ΅Oαπ§·ί¦απ§·γκ³κ΄αα±α΄β΅=OpenEXR.OutputFile(β΅α±α΄αα©ΠNγα±α΄ακ΄κ³β΅γβ΅γβ΅κ³κ΄αα±α΄γΠNα©αα±α΄β΅.encode('utf-8'),β΅α΄₯α±α΄βα©α±α΄μ·β΅γβ΅γβ΅μ·α±α΄α©βα±α΄α΄₯β΅)
β΅α©π§·α©βγπ§·α©ακ³β΅γβ΅γβ΅κ³αα©π§·γβα©π§·α©β΅=β΅α©π§·α©ββ΅γβ΅γβ΅βα©π§·α©β΅.reshape(β΅π§·μ·α€α¦κ΄α±α΄μ·β΅γβ΅γβ΅μ·α±α΄κ΄α€α¦μ·π§·β΅*β΅μ·π§·βκ΄α―β΅γβ΅γβ΅α―κ΄βπ§·μ·β΅,4)
β΅α±α΄ακ΄κ³γπ§·αί¦π§·αOβ΅γβ΅γβ΅Oαπ§·ί¦απ§·γκ³κ΄αα±α΄β΅.writePixels({
'R':β΅α©π§·α©βγπ§·α©ακ³β΅γβ΅γβ΅κ³αα©π§·γβα©π§·α©β΅[:,0].tobytes(),
'G':β΅α©π§·α©βγπ§·α©ακ³β΅γβ΅γβ΅κ³αα©π§·γβα©π§·α©β΅[:,1].tobytes(),
'B':β΅α©π§·α©βγπ§·α©ακ³β΅γβ΅γβ΅κ³αα©π§·γβα©π§·α©β΅[:,2].tobytes(),
'A':β΅α©π§·α©βγπ§·α©ακ³β΅γβ΅γβ΅κ³αα©π§·γβα©π§·α©β΅[:,3].tobytes()
})
β΅α΄₯κ€α±α΄γα±α΄π§·α©α΄₯α±α΄ΠNα±α΄α€α¦β΅γβ΅γβ΅α€α¦α±α΄ΠNα±α΄α΄₯α©π§·α±α΄γα±α΄κ€α΄₯β΅(f"Π―XΖ.π£ βͺβ€ΠNα±α΄β΅βα©α΄₯α€α¦π£β€β΅βπ£κβ΅βͺββͺ{β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅}βͺββͺβ΅κπ£ββ΅β€π£α€α¦α΄₯α©ββ΅α±α΄ΠNβ€βͺπ£ .EXR",1-β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅)
β΅α΄₯κ€α±α΄γα±α΄π§·α©α΄₯α±α΄ΠNα±α΄α€α¦β΅γβ΅γβ΅α€α¦α±α΄ΠNα±α΄α΄₯α©π§·α±α΄γα±α΄κ€α΄₯β΅(f"Π―XΖ.π£ βͺαααα±α΄ααπ£βα±α΄αα±α΄βα©απ£α΄₯βαβααβͺββͺ{β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅}βͺββͺααβαβα΄₯π£αα©βα±α΄αα±α΄βπ£ααα±α΄αααβͺπ£ .EXR",β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.concatenate([(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅/β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.max(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅)).astype(β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.float32)],axis=-1))
cv2.imencode('.png',cv2.normalize(β΅βαOμ·ααα±α΄α΄₯μ·π§·β΅γβ΅γβ΅π§·μ·α΄₯α±α΄ααμ·Oαββ΅,None,0,255,cv2.NORM_MINMAX))[1].tofile(f"κ¨ΠκΌ.π£ βͺβαβμ·ααα±α΄α΄₯μ·β€βͺββͺ{β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅}βͺββͺβ€μ·α΄₯α±α΄ααμ·βαββͺπ£ .PNG")
cv2.imencode('.png',cv2.normalize(255-β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅*255,None,0,255,cv2.NORM_MINMAX).astype(β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.uint8))[1].tofile(f"κ¨ΠκΌ.π£ βͺβ€ΠNα±α΄β΅βα©α΄₯α€α¦π£β€β΅βπ£ββͺββͺ{β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅}βͺββͺβπ£ββ΅β€π£α€α¦α΄₯α©ββ΅α±α΄ΠNβ€βͺπ£ .PNG")
cv2.imencode('.png',65535-β΅α±α΄α€α¦α©ακ΄γαα΄₯Oκ³ααΠNα©α΄₯π§·γα±α΄ααΠNα©π§·αακ΄βγβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααγπ§·κ΄8γπΒ·β΅γβ΅γβ΅Β·πγ8κ΄π§·γαααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγβκ΄ααπ§·α©ΠNααα±α΄γπ§·α΄₯α©ΠNαακ³Oα΄₯αγκ΄αα©α€α¦α±α΄β΅)[1].tofile(f"κ¨ΠκΌ.π£ βͺβ€ΠNα±α΄β΅βα©α΄₯α€α¦π£β€β΅βπ£β ΏΒ·βͺββͺ{β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅}βͺββͺΒ·β Ώπ£ββ΅β€π£α€α¦α΄₯α©ββ΅α±α΄ΠNβ€βͺπ£ .PNG")
cv2.imencode('.png',cv2.normalize(β΅α±α΄α€α¦α©ακ΄γβα±α΄αα±α΄8α©αγα±α΄αί¦κ΄π§·αααβ΅γβ΅γβ΅αααπ§·κ΄ί¦αα±α΄γαα©8α±α΄αα±α΄βγκ΄αα©α€α¦α±α΄β΅,None,0,255,cv2.NORM_MINMAX).astype(β΅δΊΊί¦ααΠNβ΅γβ΅γβ΅ΠNααί¦δΊΊβ΅.uint8))[1].tofile(f"κ¨ΠκΌ.π£ βͺαααα±α΄ααπ£βα±α΄αα±α΄βα©απ£α΄₯βαβααβͺββͺ{β΅α±α΄αα©ΠNγα±α΄ακ΄κ³γπ§·αί¦ΠNκ΄β΅γβ΅γβ΅κ΄ΠNί¦απ§·γκ³κ΄αα±α΄γΠNα©αα±α΄β΅}βͺββͺααβαβα΄₯π£αα©βα±α΄αα±α΄βπ£ααα±α΄αααβͺπ£ .PNG")
exit()
To embed this program on your website, copy the following code and paste it into your website's HTML: