annotate_invert — ANNOTATE 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의 숫자는 믿지 말 것.

Parameters

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".

Returns

(H,W[,C]) float64

반전을 얹은 복제. 입력은 다시 쓰지 않는다.

Raises

ValueError

형태 불일치 / 값 범위 밖 / 알 수 없는 draw mode on_invisible /

on_invisible="raise"에서 불가시.

Examples

>>> 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

자세한 사용 가이드

• figure_annotation 패밀리 가이드

배경 지식 가이드(이 연산자 앞에 있는 물리·규약)

• 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.