overlay op• 데이터 종류: image2d × mask → image2d
• 호출: import fullseye as fs; fs.ledger.annotate_invert(img, mask, draw='fill', width=1.5, mode='complement', alpha=1.0, bits=128, min_contrast=1.5, on_invisible='warn')(구현을 직접 호출하려면 import annotate; annotate.annotate_invert(img, mask, draw='fill', width=1.5, mode='complement', alpha=1.0, bits=128, min_contrast=1.5, on_invisible='warn'), 원장에서 가져오려면 opsannotate.get("annotate_invert"))
영역(region)을 반전색으로 칠한다/테두리를 그린다.
"바탕이 밝은지 어두운지 알 수 없으니, 어느 쪽이든 보이는 색으로 그리고 싶다"는때의 고전적인 수법. 칠할 색을 정하지 않아도 되는 대신, 중간조에서 사라지므로 annotate_invert_visibility의 측정을 내부에서 반드시 거친다.
★바탕이 모노크롬(그레이)이라면, 먼저 채도가 있는 색을 검토할 것. 회색에는채도가 없으므로, 채도가 있는 색은 어느 계조와도 색상으로 구별된다 —— 반전색보다 확실하고, 게다가 "이것은 겹친 선이다"라고 한눈에 알 수 있다(annotate_outline / overlay_mask에 역할색을 넘긴다). 반전색이 진가를 발휘하는 것은, 바탕이 컬러이고 어떤 색을 골라도 충돌할 수 있을 때.
또한 annotate_invert_visibility가 측정하는 것은 WCAG의 휘도비이므로, "휘도는 같지만 색상이 다른" 식의 보이는 방식은 평가할 수 없다 —— 색으로 그린다면, 이 op의 숫자는 믿지 말 것.
mask : (H,W)
영역. 참거짓 또는 [0,1]의 가중치. 영상과 형태가 다르면 예외.
draw : {"fill", "margin"}
HALCON의 set_draw와 같은 말. "fill"은 내부째로, "margin"
은 윤곽만 반전한다. 윤곽은 굵기 width 화소(정수로 반올림)의
띠이며, 영역의 안팎으로 절반씩 퍼진다.
width : float
draw="margin"일 때 띠의 굵기(화소).
mode : str
INVERT_MODES. "complement"는 바탕의 무늬를 남기고, "xor"는
무늬를 남긴 채 사라지지 않음을 보장하며, "contrast"는 흑백으로 바꿔
보임을 보장한다.
bits : int
mode="xor"의 bit 마스크(1..255). 기본값 0x80은 최상위 bit만을
반전한다 —— 반드시 128 계조 뛰므로 사라지지 않는다. 0xFF로 하면
complement와 같고(절벽까지 같다), 0x0F처럼 하위만의
마스크는 어느 계조에서도 보이지 않는다(실측: 전체 256 계조에서 비 1.5 미만).
alpha : float
반전의 효과. 1.0에서 완전히 반전, 0.5이면 바탕과 반전색의 중간
(mode="complement"의 0.5는 반드시 중간조가 된다 —— 반전색을
절반으로 하면 사라지는 것은 당연하므로, 경고가 그것을 잡는다).
min_contrast, on_invisible :
보이지 않는다고 판명되었을 때의 처리. "warn"(기본값) / "raise"(fail-closed)
/ "ignore".
(H,W[,C]) float64
반전을 얹은 복제. 입력은 다시 쓰지 않는다.
ValueError
형태 불일치 / 값 범위 밖 / 알 수 없는 draw mode on_invisible /
on_invisible="raise"에서 불가시.
>>> import numpy as np, annotate
>>> img = np.zeros((16, 16)); img[4:12, 4:12] = 1.0
>>> m = np.zeros((16, 16), bool); m[6:10, 6:10] = True
>>> out = annotate.annotate_invert(img, m)
>>> float(out[7, 7]), float(out[1, 1])
(0.0, 0.0)
>>> ring = annotate.annotate_invert(img, m, draw="margin", width=1)
>>> float(ring[7, 7]) # 내부는 건드리지 않는다
1.0
• dataset_conventions — 학습 데이터셋 규약 지식 — COCO / YOLO / VOC와 외관 검사의 함정
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• annotate_paper_tour — py -3.11 examples/annotate_paper_tour.py
image2d 를 입력으로 받는 것)text_box · arrow · leader_line · label_points · crosshair · legend_box · color_bar · scale_bar
overlay)overlay_mask · overlay_labels · annotate_invert_visibility · annotate_invert_path
*Provenance: annotate.py — ANNOTATE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.