2009-11-06 2 views
1

Я ищу способ извлечения в отдельные изображения яркостного (Y), Cb (синий компонент), Cr (красный компонент), каналы изображений JPEG:
Используя существующие инструменты, как я могу извлечь в отдельные изображения каналы Luma, Cb, Cr изображения JPEG?

Я хотел бы результаты, эквивалентные этим example from Wikipedia.

Вывод должен быть рассчитан непосредственно из данных сканирования в формате JPEG (SOS) и других данных в формате JPEG, , а не, чем «вычисленный» из изображений RGB, выводимых декомпрессором. Цель этой задачи - сделать изображения, которые представляют собой «необработанные данные», насколько это возможно.

Существуют ли существующие инструменты, которые могут выполнить это? Я подумываю о том, чтобы собрать что-то, используя Python, PyImage и т. Д., Но я удивлен, что поиск открытых исходных кодов или бесплатных инструментов оказался пустым. Я знаю, что есть много библиотек, которые могли бы помочь, хотя я открыт для понимания большего количества библиотек.

Для этого вопроса правильным ответом будет целая цепочка бесплатных и/или открытых инструментов, которые могут выполнять эту работу. Предпочтительными являются инструменты с источником. Эти инструменты могут работать на любой платформе, но Linux или Win32 будут сразу же полезны.

Ответ вдохновленный codelogic

Учитывая внедрение libjpeg, изменение djpeg.c и wrppm.c.

wrppm.c:

 
189: case JCS_RGB: 
190: + case JCS_YCbCr: 
191: /* emit header for raw PPM format */ 

djpeg.c

 
560: case FMT_PPM: 
561: + cinfo.quantize_colors = 0; 
562: + cinfo.out_color_space = JCS_YCbCr; 

Очевидно, что это быстрый хак, потому что у меня есть собственная копия, где выход PPM всегда вынужден YCbCr, но это работает и я благодарю вас, кодологичный, за вашу логику Stone Code.

ответ

2

Как было предложено, лучше всего использовать libjpeg. В частности, вы можете указать jpeg_decompress_struct члену out_color_space, который должен быть JCS_YCbCr вместо JCS_RGB и считать строки сканирования, как обычно. Here's какой-нибудь образец кода (GPL).

+0

Спасибо, что привели меня за нос! Я сделал несколько однострочных файлов для djpeg.c и wrppm.c, которые позволяют мне выводить файлы в формате PDF в формате YCbCr, как вы предполагали. –

1

Ну, очевидно, libjpg.

+0

Фактически, там я нашел «jpegtran -grayscale», который является половиной битвы. Мне просто нужно извлечь данные Cr, Cb, и, конечно, у меня есть источник для jpegtran. Я мог бы принять это как ответ, если ничего, что может сделать все 3 канала как есть, появляется. –

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