잉크 불량 발생 샘플: 1, 2(살짝), 4, 5, 7, 9(살짝)

스크린샷 2025-12-23 오전 10.05.52.png

살짝이라고 적어 놓은 것에서는 왼쪽(상단) 띠에서만 잉크 불량 발생. (어쨌든 잡아야하는 불량은 불량임)

그냥 픽셀 값별로 clustering 한 후에, y축 단위로 스캔하면서 픽셀값이 차이나는 영역이 있는지 여부를 판별하려고 했으나, 전체적인 색상이 어두워서인가 (지금은 갈색이 조금 더 밝게 촬영된 불량 샘플만 촬영해옴) 갈색의 일부가 검정색으로 잡혀서 구분이 어려움

image.png

image.png

color 불량 검출은 일단 코드를 남겨놓고, 촬영을 더 밝게 할 수 있는지 여부를 파악하고 나서 하려고 함

도면 값과 실제 촬영 이미지 픽셀 값의 비교

노란색 부분 50, 38, 23 정도 (도면 202, 151, 0)

흰색 부분 82, 84, 88 정도 ~ 93, 95, 97 정도 (도면 255, 255, 255)

갈색 부분 24, 21, 21 정도 (도면 105, 96, 89)

빨강 부분 75, 24, 19 정도 (도면 225, 37, 26)

검정 부분 17, 15, 16 정도 or [29, 38, 32] (도면 0, 0, 0 ~ 35, 24, 22)

근데, 매번 실제 촬영됐을 때 값을 알 수 없으니, 도면 값으로부터 추론할 수 있는 방법이 필요할 것 같음. 아래 방식으로 color 변환하면 될 것 같은데, 좀 더 샘플이 많이 쌓여야 할듯

import numpy as np

# 도면 RGB (예시)
X = np.array([
    [202,151,0],     # yellow
    [255,255,255],   # white (대표값으로 하나를 넣어야 함)
    [105,96,89],     # brown
    [225,37,26],     # red
    [0,0,0],         # black (대표값)
], dtype=float)

# 촬영 RGB (예시)
Y = np.array([
    [50,38,23],
    [88,90,92],
    [24,21,21],
    [75,24,19],
    [17,15,16],
], dtype=float)

# affine: Y ≈ X @ A^T + b
X_aug = np.hstack([X, np.ones((len(X),1))])     # [R,G,B,1]
W, *_ = np.linalg.lstsq(X_aug, Y, rcond=None)   # W: (4,3) = [A; b]

def predict(draw_rgb):
    x = np.array([*draw_rgb, 1.0], dtype=float)   # [R,G,B,1]
    y = x @ W
    return np.clip(np.rint(y), 0, 255).astype(int)

print(predict((180, 120, 40)))  # 새 색상 예측