부적절 객체 1 > 마스크 기반 크기 조절 생성 방식 정리

문제 :

원하는 바
원하는 바
허나 일반적인 생성으로는, 크기가 정상적이지 않은 객체들이 주로 생성됨.
허나 일반적인 생성으로는, 크기가 정상적이지 않은 객체들이 주로 생성됨.

결론 :

마스크 제작 + 마스크 기반 패치 생성후 되돌리기로 구현.

작업 전
작업 전
작업 후 (pedestrian with stroller / day)
작업 후 (pedestrian with stroller / day)
클래스별 샘플 — stroller / ped / helmet+vest
클래스별 샘플 — stroller / ped / helmet+vest

자세한 수행 과정

1. 마스크 제작 (수동)

step1_inputs_v2.jpg

각 배경별 마스크 제작

카메라 미적용
카메라 미적용
Fspy 직선 두개 +ground 지정으로 가상 카메라 위치 생성
Fspy
직선 두개 +ground 지정으로 가상 카메라 위치 생성
원근이 반영됨
원근이 반영됨

4. 마스크 → crop 영역 계산 (read mask image · mask_cropper 200%)

step2_mask_crop_v2.jpg

마스크를 배경 크기로 맞춘 뒤 외접하는 사각형(노란색) 계산, pad = 2 × max(w, h) 패딩을 주고(녹색)을 crop 영역으로 정한다. (패딩 200%는 통계적 관찰에 의한 판단)

그리고 추후 되돌리는 작업을 위해 좌상단 꼭짓점 x,y 과 patch의 width height를 변수로 저장.

5. crop + 빨간 박스

step3_redbox_v2.jpg

프롬프트에 in the red box 지시를 주기 위해 빨간 박스 추가

6. 프롬프트

대량 생성을 위해 변수 class를 만들고, (보행자, 유모차, 자전거, 차량, 안전조끼 입은 남자 등등) 프롬프트에 자동 산입 + 파일명에 class 저장

"add korean " + class2 + " in the red box and remove red box. " + "You must watch about size and composition."

”size and composition”은 넣었을 때 100%의 효과는 아니었으나, 연산시간이 길어지는 것으로 보아 툴콜링이 더 되는 듯 해서 추가.

7. 생성 (나노 바나나 프로)(gemini 3 pro image preview)

step4_gemini_v3.jpg

출력 결과.

클래스별 출력 — stroller / ped / both (both는 안전모 + 안전조끼)
클래스별 출력 — stroller / ped / both (both는 안전모 + 안전조끼)

8. 후처리 — CCTV 화질 맞추기 (degrade)

A 원본 크롭 · B 생성 크롭(원래 크기로 축소) · C 화질 맞춘 버전 — ×3 확대
A 원본 크롭 · B 생성 크롭(원래 크기로 축소) · C 화질 맞춘 버전 — ×3 확대
degrade 단계별 이미지 (왼쪽 = 직전 단계 · 오른쪽 = 해당 단계 결과, ×4 확대)
1. ImageResizeKJv2 — 1040 px → 165×162 (lanczos · stretch)
1. ImageResizeKJv2 — 1040 px → 165×162 (lanczos · stretch)
2. NoisePlusBlend (1 / 0) — 센서 노이즈
2. NoisePlusBlend (1 / 0) — 센서 노이즈
3. ImageSharpen (1 / 0.5 / 0.25) — 엣지 복원
3. ImageSharpen (1 / 0.5 / 0.25) — 엣지 복원
4. ImageDesaturate+ 0.2 — 채도 낮추기
4. ImageDesaturate+ 0.2 — 채도 낮추기
5. CameraRawToneCurve [[0,30],[255,225]] — 대비 축소 · 최종
5. CameraRawToneCurve [[0,30],[255,225]] — 대비 축소 · 최종
1 → 5 한눈에
1 → 5 한눈에

1K 생성물을 다시 crop 크기 w, h 로 줄이고(lanczos · stretch), 배경 CCTV 톤에 맞춰 순서대로 열화.

노드

값

목적

ImageBlur

4 / 1 · bypass

현재 비활성

ImageResizeKJv2

w, h · lanczos · stretch

원래 crop 크기로 복원

NoisePlusBlend

0.4 / 10

센서 노이즈

ImageSharpen

1 / 0.5 / 0.25

축소로 죽은 엣지 복원

ImageDesaturate+

0.2 · Rec.709

채도 낮추기

CameraRawToneCurve

Linear [[0,30],[255,225]]

블랙 띄우고 화이트 눌러 대비 축소

9. 되돌려 붙이기 (overlay)

A 원본 전체 · B 후처리 패치를 x,y 에 overlay 한 전체 프레임
A 원본 전체 · B 후처리 패치를 x,y 에 overlay 한 전체 프레임
overlay 결과 (720×480 원본 해상도)
overlay 결과 (720×480 원본 해상도)

Image Overlay: base = orginal_img, overlay = 후처리 패치, 크기 w, h · 위치 x, y (4단계 값 재사용). optional_mask 는 mask2.png red 채널 → InvertMask 로 경계 마스크.

붙인 부위 확대 — A 원본 · B feather 마스크 위치(opacity 0.5) · C 마스크 alpha 로 overlay
붙인 부위 확대 — A 원본 · B feather 마스크 위치(opacity 0.5) · C 마스크 alpha 로 overlay
mask2.png — 1024×1024 흑백 원형 feather 마스크(중심 r≤256 흰색 · 256~512 코사인 감쇠 · 밖 검정)
mask2.png — 1024×1024 흑백 원형 feather 마스크
(중심 r≤256 흰색 · 256~512 코사인 감쇠 · 밖 검정)

10. 저장 (saveURL / save_render / save_mask)

파일명은 JoinStringMulti 10개 조각으로 조립. 인덱스는 PrimitiveInt increment → zero_padding 5자리.

./prj/{draft}/{location}/{00000}_${class1}${time}        ← render
./prj/{draft}/{location}/{00000}_${class1}${time}_mask   ← mask