[cdev] Фильтрация и конволюция

Grigoriy A. Sitkarev sitkarev на komitex.ru
Вс Фев 20 05:26:17 MSK 2011


Всех приветствую.

В субботу я показывал слайды 145-й группе, которые сделал. Там 
действительно многовато было опечаток, я постарался всё исправить. А 
самое главное -- быстренько написал для вас учебную программу, чтобы вам 
было понятно как это работает.

Чтобы её скомпилировать вам нужна установленная библиотека GTK+2.0 и 
пакет libgtk2.0-dev (это для Debian-like систем) или тот в котором лежат 
заголовки для GTK+2.0 в вашем дистрибутиве. Я на самом деле использую из 
неё только GDK-PixBuf для загрузки изображений в формате PNG, JPEG и 
сохранения их в файл.

Распакуете архив:

$ tar -zxvf imgfilter.tar.gz

Зайдете в каталог:

$ cd imgfilter

И соберёте программу:

$ make

Если вдруг не найдёт какого-то заголовка -- попробуйте поправить руками. 
Но по идее если у вас Debian Lenny то всё должно работать.

Дальше, берёте любую картинку в формате JPEG или PNG и натравливаете на 
неё Гауссов фильтр (сейчас там задан фиксированный радиус 5, можете 
поэкспериментировать с ним).

$ ./imgfilter /home/sitkarev/image.png

Утилита отфильтрует изображение, применив к нему Гауссов фильтр (ядро 
фильтра задаётся функцией gauss()), и поместит его в файл out.png в 
формате PNG, даже если вы открывали JPEG.

Для простоты, там не обрабатываются краевые случаи поэтому вокруг 
изображения нетронутая каёмка шириной в радиус фильтра. Она также не 
оптимальна, т.к. например нет смысла каждый раз вычислять значения 
фильтра, можно их просто поместить в массив. Но мне нужно было 
продемонстрировать как это всё на самом деле считается, а задача 
оптимизации отложена на потом. RGB компоненты изображения выдираются и 
сохраняются в массиве float -- для того чтобы было понятно как они 
хранятся в буфере и как их оттуда заполучить.

В коде оставлена функция которая делает конволюцию так как это даётся в 
книгах. Ради эксперимента попробуйте воспользоваться ей и посмотрите 
насколько медленнее она работает.

--
Г.А.
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: imagefiltering.pdf
Type: application/pdf
Size: 78642 bytes
Desc: отсутствует
URL: <http://amplab.syktsu.ru/pipermail/cdev/attachments/20110220/cc96f987/attachment.pdf>
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: imgfilter.tar.gz
Type: application/x-gzip
Size: 1678 bytes
Desc: отсутствует
URL: <http://amplab.syktsu.ru/pipermail/cdev/attachments/20110220/cc96f987/attachment.bin>


Подробная информация о списке рассылки cdev