Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 17
1

Гистограмма CMYK/RGB - некорректный перевод из CMYK в RGB

28.05.2014, 03:51. Просмотров 2575. Ответов 5
Метки нет (Все метки)


Возникла проблема с правильностью перевода из RGB в CMYK. Все переменные до самого конца - double, но при этом расчёты будто ведёт пьяный Вася, а не точный компьютер. Совершенно странные числа, совсем не по моим формулам.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
                    color = img.GetPixel(i, j);
                    double Rt = color.R;
                    double Gt = color.G;
                    double Bt = color.B;
 
                    double Ccount = 1.00 - (Rt / 255);
                    double Mcount = 1.00 - (Gt / 255);
                    double Ycount = 1.00 - (Bt / 255);
                    double var_K = 1;
                    
                    if (Ccount < var_K) var_K = Ccount;
                    if (Mcount < var_K) var_K = Mcount;
                    if (Ycount < var_K) var_K = Ycount;
                    if (var_K == 1) 
                    {
                        Ccount = 0;
                        Mcount = 0;
                        Ycount = 0;
                        var_K = 100;
                    }
                    if (var_K != 1)    
                    {
                                Ccount =((Ccount - var_K) / (1 - var_K)) * 100;
                                Mcount =((Mcount - var_K) / (1 - var_K)) * 100;
                                Ycount =((Ycount - var_K) / (1 - var_K)) * 100;
                                var_K = var_K * 100;
                    }
                    C[Convert.ToInt32(Ccount)]++;
                    M[Convert.ToInt32(Mcount)]++;
                    Y[Convert.ToInt32(Ycount)]++;
                    K[Convert.ToInt32(var_K)]++;
                }
Помогите разобраться, где ошибка в расчётах.
За формулу перевода использовал формулы: http://www.easyrgb.com/index.p... =13#text13
Прикрепил также полную версию проекта.
0
Вложения
Тип файла: rar Histogram.rar (141.4 Кб, 49 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2014, 03:51
Ответы с готовыми решениями:

Перевод из RGB в CMYK
Помогите с реализацией, а то не могу разобраться... Может кто работал в этой области... ...

Преобразование изображения из RGB в CMYK
При переводе изображения из RGB в CMYK не получается записать рассчитанные для CMYK значения в...

Изменение цветового формата с rgb на cmyk
Здравствуйте, никак не могу преобразовать цветовой формат в картинке (Bitmap), в пробовал...

Гистограмма изображения по компонентам RGB
Здравствуйте! Пытаюсь построить гистограмму по трём цветовым компонентам из исходного изображения....

5
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 17
28.05.2014, 06:33  [ТС] 2
Гистограмма CMYK/RGB - некорректный перевод из CMYK в RGB

Все гистограммы правильно считаются, кроме CMYK'a. Вот скриншот. Гистограммы CMYKA - 4 правые.
0
1193 / 586 / 88
Регистрация: 20.09.2012
Сообщений: 1,877
28.05.2014, 12:03 3
Код
      Ycount = 0;
                        var_K = 100;
                    }
                    if (var_K != 1)    
                    {
                                Ccount
здесь так и должно быть или это вольная интерпретация исходного алгоритма?
0
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 17
28.05.2014, 15:15  [ТС] 4
Цитата Сообщение от pycture Посмотреть сообщение
Код
      Ycount = 0;
                        var_K = 100;
                    }
                    if (var_K != 1)    
                    {
                                Ccount
здесь так и должно быть или это вольная интерпретация исходного алгоритма?
Вольная интерпретация.
Изначально мы находим значения CMY из RGB. По средством деления R,G,B на 255 и вычитания из единицы.
C#
1
2
3
4
5
6
7
                    double Rt = color.R;
                    double Gt = color.G;
                    double Bt = color.B;
 
                    double Ccount = 1.00 - (Rt / 255);
                    double Mcount = 1.00 - (Gt / 255);
                    double Ycount = 1.00 - (Bt / 255);
Дальше нам необходимо перевести CMY в CMYK. Для этого мы приравниваем временнуюK = 1. И начинаем сравнивать с остальными цветами.
C#
1
2
3
                    if (Ccount < var_K) var_K = Ccount;
                    if (Mcount < var_K) var_K = Mcount;
                    if (Ycount < var_K) var_K = Ycount;
Дальше проверяем на 1цы, если все цвета CMY были равны 1му, то значит на экране чёрный цвет, и мы задаём K = 1 и умножаем на 100 (т.к значения идут от 0 до 1), а остальные приравниваем нулю.
Во всех остальных случаях:
C#
1
2
3
4
5
 
                                Сcount =((Ccount - var_K) / (1 - var_K)) * 100;
                                Mcount =((Mcount - var_K) / (1 - var_K)) * 100;
                                Ycount =((Ycount - var_K) / (1 - var_K)) * 100;
                                var_K = var_K * 100;
0
1193 / 586 / 88
Регистрация: 20.09.2012
Сообщений: 1,877
28.05.2014, 15:32 5
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

после var_K = 100; всегда будет срабатывать if (var_K != 1)
т.е.
C#
1
2
3
4
                                Сcount =((Ccount - var_K) / (1 - var_K)) * 100;
                                Mcount =((Mcount - var_K) / (1 - var_K)) * 100;
                                Ycount =((Ycount - var_K) / (1 - var_K)) * 100;
                                var_K = var_K * 100;
сработает не в остальных случаях, а всегда

Добавлено через 1 минуту
поменяйте if (var_K != 1) на else как в оригинале
1
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 17
28.05.2014, 15:38  [ТС] 6
Ох... и правда... Как я мог этого не замечать
Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2014, 15:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

CMYK -> RGB
Какой алгоритм конвертирования из цветового пространства CMYK в RGB. В гугле был найден только RGB...

Вывод CMYK и RGB
Собстно надо сделать чтоб прога выводила CMYK и RGB таблицы с шагом в 20%. Перерыл гуугл, без...

Конвертация RGB в CMYK (LittleCMS library): какой тип переменных нужно использовать для такой конвертации?
Друзья, добрый день. Пожалуйста, помогите сделать преобразование цветов в Little CMS с помощью...

CMYK to RBG in C++
Стоит задача на выходе камеры снять показатели RGB. Подскажите, с чего начать и как определить саму...

Формула субтрактивного смешения цветов (CMYK)
Нужна формула субтрактивного смешения 2 и 3 цветов. Это цвета в формате CMYK. Например, есть первый...

Перевод RGB в HSV
Уважаемые форумчане! Есть функция для перевода RGB в HSV. void RGBtoHSV (int *hue, int *sat,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.