memory heap
HELLO HUMAN. #projects #guile #png #parser #lisp
PNG формат подразумевает прогон исходных данных изображения перед компрессией через фильтры, чтобы эту самую компрессию сделать более эффективной. RFC 2083 описывает 5 типов фильтров (от 0 до 4).
Также PNG оперирует таким понятием, как "линии сканирования" (scanlines). Изображение делится на эти линии сканирования, каждая из которых описывает одну строку растрового изображения. При этом, после декомпрессии данных изображения каждая линия на 1 байт длинее, чем фактический размер данных одной строки изображения, т.к. в начале линии сканирования находится байт, содержащий тип фильтра, применённого к данной строке.
Чтобы получить непосредственно изображение "для человеков", надо после декомпрессии ещё прогнать каждую строку через соответствующий фильтр (который выбирается на основе номера фильтра в первом байте каждой строки) с обратным действием, чтобы декодировать данные. При этом, байт с типом фильтра должен быть удалён.
Иными словами, если у вас цветное изображение 10х10 пикселей, при этом каждый пиксель кодируется тремя байтами (RGB-формат, 8 бит на цвет), то длина строки сканирования вместе с начальным байтом фильтра будет
Тогда как конечное изображение после обратного применения фильтра будет иметь размер строки:
Типы фильтров для каждой строки изображения выбираются кодировщиком PNG исходя из соображений эффективности сжатия (стандарт RFC 2083 про это говорит отдельно.) То есть, в рамках одного изображения к разныем строкам могут применяться разные фильтры.
На данном этапе у меня возникают ошибки именно из-за того, что я неправильно работаю с этими фильтрами.
#png #format
Также PNG оперирует таким понятием, как "линии сканирования" (scanlines). Изображение делится на эти линии сканирования, каждая из которых описывает одну строку растрового изображения. При этом, после декомпрессии данных изображения каждая линия на 1 байт длинее, чем фактический размер данных одной строки изображения, т.к. в начале линии сканирования находится байт, содержащий тип фильтра, применённого к данной строке.
Чтобы получить непосредственно изображение "для человеков", надо после декомпрессии ещё прогнать каждую строку через соответствующий фильтр (который выбирается на основе номера фильтра в первом байте каждой строки) с обратным действием, чтобы декодировать данные. При этом, байт с типом фильтра должен быть удалён.
Иными словами, если у вас цветное изображение 10х10 пикселей, при этом каждый пиксель кодируется тремя байтами (RGB-формат, 8 бит на цвет), то длина строки сканирования вместе с начальным байтом фильтра будет
10 писелей * 3 байта на пиксель + 1 байт типа фильтра = 31 байт
Тогда как конечное изображение после обратного применения фильтра будет иметь размер строки:
10 писелей * 3 байта на пиксель = 30 байт
Типы фильтров для каждой строки изображения выбираются кодировщиком PNG исходя из соображений эффективности сжатия (стандарт RFC 2083 про это говорит отдельно.) То есть, в рамках одного изображения к разныем строкам могут применяться разные фильтры.
На данном этапе у меня возникают ошибки именно из-за того, что я неправильно работаю с этими фильтрами.
#png #format
👍2🔥1
Наконец-то получилось корректно декодировать изображение PNG, где встречаются все 5 видов фильтров.
По поводу корректности обработки альфа-канала пока не уверен, нужны ещё тесты.
А вот здесь вы можете увидеть результат обработки декодированного изображения — инверсии цветов.
\o/
#projects #guile #png #parser
По поводу корректности обработки альфа-канала пока не уверен, нужны ещё тесты.
А вот здесь вы можете увидеть результат обработки декодированного изображения — инверсии цветов.
\o/
#projects #guile #png #parser
🔥4
Пример эффекта соларизации с порогом 100. Соларизация похоже на инверсию цветов, с той разницей, что при соларизации инверсия цветов применяется только для тех цветовых каналов, значения которых больше (или меньше, как в моём случае), чем пороговое. Знак больше-меньше выбирается вместе с пороговым значением и влияет на конечный эффект.
Кстати, эту картинку я сделал как-то давно для группы своих дипломников в Telegram.
Исходный код:
Кстати, эту картинку я сделал как-то давно для группы своих дипломников в Telegram.
Исходный код:
(use-modules (png)#projects #guile #png #parser #image_processing
(png image)
(png image-processing))
(define (main args)
(let* ((image (png->scm))
(result (png-image-filter-solarize image
100)))
(scm->png result)))
⚡3
Выпустил релиз Guile-PNG 0.1.0:
https://github.com/artyom-poptsov/guile-png/releases/tag/v0.1.0
Пока библиотека стабильно работает только с форматами цвета 8 бит. Есть возможность чтения и записи PNG-изображений, также можно получать доступ к пикселям изображения и делать обработку.
Есть два примера фильтров изображения: инверсия цветов и соларизация. Также в репозитории прилагаются примеры использования (в каталоге
Это уже третья моя библиотека которая использует Guile State Machine Compiler (Guile-SMC) для реализации детерминированного конечного автомата.
#projects #guile #png #library
https://github.com/artyom-poptsov/guile-png/releases/tag/v0.1.0
Пока библиотека стабильно работает только с форматами цвета 8 бит. Есть возможность чтения и записи PNG-изображений, также можно получать доступ к пикселям изображения и делать обработку.
Есть два примера фильтров изображения: инверсия цветов и соларизация. Также в репозитории прилагаются примеры использования (в каталоге
examples.)Это уже третья моя библиотека которая использует Guile State Machine Compiler (Guile-SMC) для реализации детерминированного конечного автомата.
#projects #guile #png #library
GitHub
Release v0.1.0 · artyom-poptsov/guile-png
Version 0.1.0
👏1
Предпосылки к разработке преобразования Фурье:
https://www.youtube.com/watch?v=nmgFG7PUHfo
https://www.youtube.com/watch?v=nmgFG7PUHfo
YouTube
The Most Important Algorithm Of All Time
The Fast Fourier Transform is used everywhere but it has a fascinating origin story that could have ended the nuclear arms race. This video is sponsored by 80,000 Hours. Head to https://80000hours.org/veritasium to sign up for their newsletter and get sent…
👍1
#music #music_ambient #music_drone
Красивый альбом.
36, "Colours in the Dark":
https://www.youtube.com/watch?v=_OEfEkChLrI
Красивый альбом.
36, "Colours in the Dark":
https://www.youtube.com/watch?v=_OEfEkChLrI
Обновил список проектов на сайте:
https://memory-heap.org/~avp/projects.html
Добавил документацию на Guile-ICS, экспортированную в HTML.
https://memory-heap.org/~avp/projects.html
Добавил документацию на Guile-ICS, экспортированную в HTML.
memory-heap.org
memory heap / projects
👍1
"Коммодордион" — аккордион из Commodore 64:
https://arstechnica.com/gadgets/2022/11/playable-commodore-64-accordion-delights-with-homemade-chiptune-goodness/
Сайт проекта:
https://linusakesson.net/commodordion/index.php
https://arstechnica.com/gadgets/2022/11/playable-commodore-64-accordion-delights-with-homemade-chiptune-goodness/
Сайт проекта:
https://linusakesson.net/commodordion/index.php
Ars Technica
Swedish engineer creates playable accordion from 2 Commodore 64 computers
Linus Åkesson's instrument sports custom software and a bellows made of floppy disks.
memory heap
#music #music_blues #music_piano https://www.youtube.com/watch?v=NAF9y80t2N8
YouTube
Henri Herbert - Austin Texas Boogie Woogie
** News Alert **
★★ HENRI HERBERT TOUR - OCTOBER AND NOVEMBER 2024 ★★
These concerts are coming up fast - my first solo tour since last year. Charged up to bring the boogie to New York City, Montreal and London. All these venues are great, and I’m ready…
★★ HENRI HERBERT TOUR - OCTOBER AND NOVEMBER 2024 ★★
These concerts are coming up fast - my first solo tour since last year. Charged up to bring the boogie to New York City, Montreal and London. All these venues are great, and I’m ready…
memory heap
Выпустил релиз Guile-PNG 0.1.0: https://github.com/artyom-poptsov/guile-png/releases/tag/v0.1.0 Пока библиотека стабильно работает только с форматами цвета 8 бит. Есть возможность чтения и записи PNG-изображений, также можно получать доступ к пикселям изображения…
Приняли патч с Guile-PNG в GNU Guix:
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=d178c89a2ad5a92cf967030ce0059f003417ad52
Теперь можно поставить библиотеку так:
#guix_patches #guix #projects
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=d178c89a2ad5a92cf967030ce0059f003417ad52
Теперь можно поставить библиотеку так:
$ guix install guile-png
#guix_patches #guix #projects
❤3
memory heap
https://www.youtube.com/watch?v=UCKKqxaraFE
И ещё больше буги-вуги от Генри Герберта:
https://www.youtube.com/watch?v=AIy_dPANknE
https://www.youtube.com/watch?v=AIy_dPANknE
YouTube
Swanee River Boogie - Fan Request!
I've had several requests for this tune, so I uploaded my version of it here.
For more videos and masterclass tuition, visit www.patreon.com/henriherbert
Filmed by Robert Parker
For more videos and masterclass tuition, visit www.patreon.com/henriherbert
Filmed by Robert Parker