В интернете достаточно статей и проектов для ресайза изображений. Почему же нужна еще одна? В этой статье я расскажу почему нас не удовлетворили текущие решения и пришлось пилить собственное.
Читать полностью »
Рубрика «image processing» - 2
Оптимизация изображений для web
2018-03-17 в 9:08, admin, рубрики: C, Go, golang, image processing, libvips, linux, Mozjpeg, open source, pngquant, высокая производительность, обработка изображенийДетектирование и отслеживание множественных объектов в видеопотоке на FPGA
2017-04-23 в 21:14, admin, рубрики: fpga, image processing, video streaming, Алгоритмы, обработка изображений, программирование микроконтроллеров
В этой статье я хочу рассказать о реализации системы обнаружения и отслеживания множественных объектов в видеопотоке. Данная статья базируется на двух предыдущих: Детектирование движения в видеопотоке на FPGA и Фильтрация изображения методом математической морфологии на FPGA. Захват и первичная обработка изображения осуществляется при помощи методов, описанных в первой статье, а фильтрация изображения описана во второй.
Следуя целям, поставленным в первой статье, я решил реализовать алгоритм отрисовки рамки вокруг обнаруженного объекта. В процессе выполнения этой задачи, я столкнулся с вопросом: а вокруг какого именно объекта надо рисовать рамку? Объектов, попавших в кадр после фильтрации, может оказаться множество: одни из них маленькие, а другие большие. Если рисовать одну рамку вокруг всех объектов, попавших в кадр, то это делается не сложно, но результат работы такой системы вряд ли кому будет интересен.
Читать полностью »
Вращение изображения на FPGA
2017-03-30 в 14:57, admin, рубрики: fpga, image processing, video captute, Алгоритмы, обработка изображений, программирование микроконтроллеров
Пол года назад я наткнулся в сети вот на это видео.
Первой мыслью было то, что это очень круто и у меня такое никогда не получится повторить. Шло время, читались статьи, изучались методы и я искал примеры реализации подобного, но к моему огорчению, в сети ничего конкретного не находилось. Наткнувшись однажды на вычисления тригонометрических функций с использованием алгоритмов CORDIC, я решил попробовать создать свою собственную вращалку изображения на ПЛИС.
Читать полностью »
Изменение размера изображения с учётом содержимого
2017-03-18 в 21:31, admin, рубрики: image processing, image resize, liquid resize, Rust, seam carving, Алгоритмы, изображения, масштабирование, обработка изображений, ПрограммированиеИзменение размера изображения с учётом содержимого (Content Aware Image Resize), жидкое растяжение (liquid resizing), ретаргетинг (retargeting) или вырезание шва (seam carving) относятся к методу изменения размера изображения, где можно вставлять или удалять швы, или наименее важные пути, для уменьшения или наращивания изображения. Об этой идее я узнал из ролика на YouTube, от Shai Avidan и Ariel Shamir.
В этой статье будет рассмотрена простая пробная реализация идеи изменения размера изображения с учётом содержимого, естественно на языке Rust :)
Для подопытной картинки, я поискал по запросу1 "sample image"
, и нашел её2:
Pix2Pix: Как работает генератор кошечек
2017-03-07 в 3:32, admin, рубрики: deep learning, image processing, машинное обучение, обработка изображенийВы все, наверное, уже видели сверх-реалистичных кошечек, которых можно рисовать вот тут:
https://affinelayer.com/pixsrv/
Давайте разбираться, что же там внутре.
Pillow-SIMD
2016-05-24 в 10:00, admin, рубрики: AVX2, gaussian blur, image processing, image resize, imagemagick, pillow, pillow-simd, python, simd, SSE4, высокая производительность, обработка изображенийУскорение операций в 2.5 раза по сравнению с Pillow и в 10 по сравнению с ImageMagick
Pillow-SIMD — это «форк-последователь» библиотеки работы с изображениями Pillow (которая сама является форком библиотеки PIL, ныне покойной). «Последователь» означает, что проект не становится самостоятельным, а будет обновляться вместе с Pillow и иметь ту же нумерацию версий, только с суффиксом. Я надеюсь более-менее оперативно выпускать версии Pillow-SIMD сразу после выхода версий Pillow.
Почему SIMD
Есть несколько способов улучшения производительности обработки изображений (да и всех остальных вещей, наверное, тоже).
- Можно использовать более хорошие алгоритмы, которые дают такой же результат.
- Можно сделать более быструю реализацию существующего алгоритма.
- Можно подключить больше вычислительных ресурсов для решения той же задачи: дополнительные ядра CPU, GPU.
Сжатие и передача потокового видео по TCP с помощью OpenCV
2016-05-17 в 11:11, admin, рубрики: c++, image processing, opencv, обработка изображений, С++, Сетевые технологииПо работе я занимаюсь разработкой алгоритмов обработки изображений и в частности алгоритмами автоматического слежения за объектами на видео для специального применения. Недавно понадобилось сделать модель алгоритма, управляемую с удаленного компьютера для отладки логики работы в сложной системе. Раньше такая задача не стояла, т.к. все алгоритмы реализовывались в итоге на FPGA. Давно работаю с OpenCV и, потерев руки, подошел к написанию программы. Но энтузиазм быстро погас, когда столкнулся непосредственно с передачей видео по сети.
Задача заключалась в следующем:
1. Написать программу сервер, которая загружает видео из файла, сжимает в JPEG и передает по протоколу TCP программе клиенту.
2. Написать программу клиент, которая принимает видео по TCP, декодирует и отображает.
Читать полностью »
Постановка задачи компьютерного зрения
2016-01-13 в 0:36, admin, рубрики: computer vision, image processing, image recognition, machine learning, opencv, Алгоритмы, Анализ и проектирование систем, Компьютерное зрение, машинное обучение, обработка изображений, разработка, распознавание образов, распознавание текста, метки: image recognition
Последние лет восемь я активно занимаюсь задачами, связанными с распознаванием образов, компьютерным зрением, машинным обучением. Получилось накопить достаточно большой багаж опыта и проектов (что-то своё, что-то в ранге штатного программиста, что-то под заказ). К тому же, с тех пор, как я написал пару статей на Хабре, со мной часто связываются читатели, просят помочь с их задачей, посоветовать что-то. Так что достаточно часто натыкаюсь на совершенно непредсказуемые применения CV алгоритмов.
Но, чёрт подери, в 90% случаев я вижу одну и ту же системную ошибку. Раз за разом. За последние лет 5 я её объяснял уже десяткам людей. Да что там, периодически и сам её совершаю…
В 99% задач компьютерного зрения то представление о задаче, которое вы сформулировали у себя в голове, а тем более тот путь решения, который вы наметили, не имеет с реальностью ничего общего. Всегда будут возникать ситуации, про которые вы даже не могли подумать. Единственный способ сформулировать задачу — набрать базу примеров и работать с ней, учитывая как идеальные, так и самые плохие ситуации. Чем шире база-тем точнее поставлена задача. Без базы говорить о задаче нельзя.
Тривиальная мысль. Но все ошибаются. Абсолютно все. В статье я приведу несколько примеров таких ситуаций. Когда задача поставлена плохо, когда хорошо. И какие подводные камни вас ждут в формировании ТЗ для систем компьютерного зрения.
Читать полностью »
Ресайз картинок в браузере. Все очень плохо
2015-03-04 в 13:52, admin, рубрики: canvas, html5, image processing, javascript, resize, Веб-разработкаЕсли вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как канва. На него можно нанести изображение, задав желаемые размеры. Пять строчек кода и картинка готова:
function resize(img, w, h) {
var canvas = document.createElement('canvas');
canvas.width = w;
canvas.height = h;
canvas.getContext('2d').drawImage(img, 0, 0, w, h);
return canvas;
}
Потом с помощью этой же канвы картинку можно сохранить в JPEG и, например, отправить на сервер. В чем же тут подвох? А дело в качестве получившегося изображения. Если вы поставите рядом такую канву и обычный элемент <img>
, в который загружена эта же картинка (исходник, 4 Мб), то вы увидите разницу.
Pillow 2.7 — Существенное улучшение качества и производительности
2015-01-02 в 9:01, admin, рубрики: image processing, image resize, imagemagick, python, resample, обработка изображенийПервого января 2015 года по расписанию вышла новая версия библиотеки для работы с изображениями Pillow 2.7. Так как многие изменения в ней были сделаны командой Uploadcare, мы рады представить вам расширенную версию заметок о релизе этой версии.
Для начала вспомним, с чего все началось. Pillow — дружественный форк (как называют его авторы) популярной библиотеки PIL, Python Imaging Library. Последняя версия PIL 1.1.7 вышла в 2009 году и в основном содержала исправления ошибок. Изначально Pillow задумывался как проект только по приведению в порядок сборки PIL, и разработчики рекомендовали отправлять все баги, не связанные со сборкой, в оригинальный PIL. Но время шло, PIL стремительно устаревала, багов не уменьшалось, тут еще Python 3 маячил на горизонте. Поэтому с версией Pillow 2.0 все изменилось. «Pillow 2.0.0 добавляет поддержку Python 3 и включает много багфиксов со всего интернета» гласит описание проекта на PyPI. И с тех пор понеслось. Каждые три месяца выходили версии с огромных количеством багфиксов и другими улучшениями от различных разработчиков. Самое значительное нововведение за это время было, пожалуй, поддержка форматов WebP и JPEG2000. Теперь пришло время следующего большого шага.
Читать полностью »