2013-02-22 4 views
2

Мне нужно преобразовать изображение CMYK в полутоновое изображение CMYK. Сначала я думал, что могу использовать тот же метод, что и для преобразования RGB -> оттенков серого, например (R + G + B)/3 или max (r, g, b)/2 + min (r, g, b). Но, к сожалению, это плохо работает для CMYK, потому что CMY и K являются избыточными. И черный CMYK (0, 0, 0, 255) будет 64. Если я просто использоватьОттенок CMYK в оттенках серого

int grayscaled = max((c + m + y)/3, k) 

или это может быть более сложным? Я не уверен, потому что CMYK на самом деле является избыточной моделью цвета, и один и тот же цвет может быть закодирован по-разному.

+0

Если вы пытаетесь получить изображение с серой шкалой, не будет ли выход только K-каналом? Я не совсем понимаю CMYK, поэтому, пожалуйста, объясните мне, если я ошибаюсь. – Hawken

+0

@Hawken no, max CMY является черным, поэтому существует множество способов представления цвета в CMYK. Я имею в виду (1, 1, 1, 0) и (0, 0, 0, 1) теоретически тот же черный цвет. – AvrDragon

+0

правда, но если они одного цвета, использование только черных чернил спасет чернила, не так ли? Кроме того, некоторые принтеры используют разные черные чернила, делая оттенки серого; возможно, только использование канала «K» может вызвать это? – Hawken

ответ

2

Существует несколько способов преобразования RGB в оттенки серого, среднее из указанных каналов является одним из них. Использование канала Y из цветового пространства YCbCr также является общим вариантом, а также L каналом от LAB, среди других вариантов.

Преобразование CMYK в RGB дешев по формулам в http://www.easyrgb.com/index.php?X=MATH, а затем вы можете преобразовать в оттенки серого, используя хорошо известные подходы. Предположив, что c, m, y и k в диапазоне [0, 1], мы можем преобразовать его в оттенках серого яркостной как в:

def cmyk_to_luminance(c, m, y, k): 
    c = c * (1 - k) + k 
    m = m * (1 - k) + k 
    y = y * (1 - k) + k 

    r, g, b = (1 - c), (1 - m), (1 - y) 
    y = 0.299 * r + 0.587 * g + 0.114 * b 
    return y 

Смотрите также http://en.wikipedia.org/wiki/Grayscale для немного больше об этом преобразовании в оттенки серого.

+0

Фактически преобразование формы cmyk в rgb не так просто и требует icc_profile, но «простая» формула работает + - отлично. – AvrDragon

Смежные вопросы