Zde je funkce, která na předem vygenerovaných binárních projekcích n_small_bl_row.png
, n_small_bl_col.png
, n_small_tr_row.png
, n_small_tr_col.png
:
-
otevře odpovídající
Image
objekty -
pro každý z nich prozkoumá hodnoty pixelů
-
rozdělí je na dva kontejnery
dark
(0–188) agray
(189–232) -
vrátí čtyři seznamy intervalů
(start_index, end_index)
v rámci těchto projekcí
from PIL import Image
def collect_shadow_ranges(
bl_row_path: str,
bl_col_path: str,
tr_row_path: str,
tr_col_path: str,
dark_max: int = 188,
gray_min: int = 189,
gray_max: int = 232
) -> dict:
"""
Pro každou 1D projekci (row i col, small_bl i small_tr) vrátí intervaly,
kde pixelová hodnota spadá do dark (<=dark_max) nebo gray (>=gray_min a <=gray_max).
"""
def find_intervals(vals, lo, hi):
intervals = []
start = None
for i, v in enumerate(vals):
if lo <= v <= hi:
if start is None:
start = i
else:
if start is not None:
intervals.append((start, i-1))
start = None
if start is not None:
intervals.append((start, len(vals)-1))
return intervals
# načteme projekce
bl_row = Image.open(bl_row_path).convert("L").getdata()
bl_col = Image.open(bl_col_path).convert("L").getdata()
tr_row = Image.open(tr_row_path).convert("L").getdata()
tr_col = Image.open(tr_col_path).convert("L").getdata()
bl_row = list(bl_row)
bl_col = list(bl_col)
tr_row = list(tr_row)
tr_col = list(tr_col)
return {
"bl_dark_row": find_intervals(bl_row, 0, dark_max),
"bl_gray_row": find_intervals(bl_row, gray_min, gray_max),
"bl_dark_col": find_intervals(bl_col, 0, dark_max),
"bl_gray_col": find_intervals(bl_col, gray_min, gray_max),
"tr_dark_row": find_intervals(tr_row, 0, dark_max),
"tr_gray_row": find_intervals(tr_row, gray_min, gray_max),
"tr_dark_col": find_intervals(tr_col, 0, dark_max),
"tr_gray_col": find_intervals(tr_col, gray_min, gray_max),
}
Tato funkce neukládá nic na disk, ale očekává cesty ke čtyřem jednorozměrným obrázkům a vrací slovník s osmi položkami, kde každá je seznamem intervalů (start, end)
odpovídajících tmavým (dark
) nebo světlým (gray
) úsekům.
Teď prosím pošli aktuální verzi svého skriptu, kam tuto funkci zařadíme.
Žádné komentáře:
Okomentovat