Инверсия цвета в JPG

Простейшие вопросы в области инженерной разработки
Ответить
Endeavour
junior
junior
Сообщения: 55
Зарегистрирован: 30 июл 2012, 16:00
Версия LabVIEW: 2011 & 8.0

Инверсия цвета в JPG

Сообщение Endeavour »

Стоит задача автоматически инвертировать цвета в фотографиях цифровой камеры, внося минимальные искажения в результат и сохраняя оригинальное изображение. Ранее эта операция выполнялась в InfranView, но пользоваться этой программой мы больше не можем. Мой VI инвертирует цвета, похоже, правильно, но я хочу обсудить два вопроса:
  • я не уверен, вносит ли этот код дополнительные искажения (артефакты) в инвертированный файл?
  • сейчас преобразование ведется "в лоб" попиксельно, т.е. очень долго даже для одной фотографии. Когда придется инвертировать 500 или 1000 изображений, время обработки станет неприемлемым. Есть ли возможность ускорить или оптимизировать обработку?
Буду рад вашим замечаниям и советам!
Вложения
Read&ProcessSingleJPEG_v2.vi
(26.83 КБ) 37 скачиваний
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Инверсия цвета в JPG

Сообщение AndreyDmitriev »

Код, разумеется, вносит искажения из-за перепаковки в jpeg - здесь идёт сжатие с потерями. Самый простой способ оценить их - инвертировать картинку ещё раз и сравнить с оригиналом (вычтя одно изображение из другого). Чтобы этого избежать, вам надо использовать формат без сжатия (TIFF или PNG).

Что касается оптимизации, то самый простой способ переделать вот так:
Изображение

Код этот делает ровно тоже самое, что и у вас, но не крутит ненужный цикл и не требует решейпинга массива.
Endeavour
junior
junior
Сообщения: 55
Зарегистрирован: 30 июл 2012, 16:00
Версия LabVIEW: 2011 & 8.0

Re: Инверсия цвета в JPG

Сообщение Endeavour »

Спасибо!
В ранних версиях я тоже пробовал вычетание массива из числа, но, тогда, определил операцию некорректно и получил ошибку на выходе. Теперь вижу мою ошибку, да, такое решение ощутимо быстрее.
К сожалению, формат JPG определен спецификацией, и со вносимыми искажениями придется бороться по-другому или согласиться.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Инверсия цвета в JPG

Сообщение AndreyDmitriev »

Чисто теоретически есть возможность пересохранять в jpeg без перекодирования, и, вероятно простую инверсию можно протащить через jpeg с минимальными потерями, но это потребует очень глубоко залезть в алгоритм, чего данные функции не предоставляют, так что просто оставьте как есть - там потери минимальны, визуально вообще не видны.А, можете ещё quality вход задействовать - он там по умолчанию в 80 установлен, так можно потери ещё чуть уменьшить ценой увеличения размера файла.
Но вы не первый, кто борется с такой проблемой - https://stackoverflow.com/questions/346 ... -inversion
Ответить

Вернуться в «Для чайников»