Avería: The Average Font (2011)
Автор создал новый шрифт Avería, усреднив все шрифты на своём компьютере. Идея родилась из интереса к типографике и креативному программированию. Сначала он накладывал буквы разных шрифтов с низкой прозрачностью, а затем использовал ImageMagick и PHP для математического усреднения изображений. Выравнивание по базовой линии и началу координат дало более чёткие результаты, чем простое наложение. Автор обнаружил, что строчная буква 'g' имеет две распространённые формы, а большинство шрифтов демонстрируют высокую корреляцию.
Когда простой метод дал размытые результаты, автор начал искать способы сохранить чёткие края. Он экспериментировал с пороговыми значениями для создания монохромных изображений, но столкнулся со сложностью математического усреднения форм. После изучения крив Безье и метрик шрифтов, он выбрал простой подход: разбиение контура каждой буквы на 500 равноотстоящих точек и усреднение соответствующих позиций. За месяц работы над проектом он создал Avería — название, связанное со словом "average" (среднее), но на испанском означающее "поломка".
Комментарии (37)
- Обсуждение началось с демонстрацией шрифта Averia как примера "усреднённого" шрифта, что вызвало обсуждение его визуального качества и ассоциаций с "uncanny valley".
- Участники обсудили, что Averia выглядит мутновато и непривычно, что вызвало дискуссию о том, какие именно параметры делают шрифт читаемым и приятным.
- Были подняты вопросы о том, как средний шрифт может влиять на читаемость и какие именно параметры делают его таким.
- Также обсуждались вопросы авторского права и атрибуции, так как Averia был создан как "усреднение" всех шрифтов в системе.
- Участники также затронули тему того, что именно делает шрифт визуально привлекательным и читаемым, и какие параметры важны для этого.
By the Power of Grayscale
Статья представляет собой руководство по созданию минимальной библиотеки компьютерного зрения Grayskull, использующей только 8-битные изображения в градациях серого, обычный C и простые структуры данных. Автор демонстрирует базовые операции с пикселями: инвертирование, зеркалирование, копирование, обрезку и изменение размера. Особое внимание уделено двум методам масштабирования - ближайшего соседа (быстрый, но с блоками) и билинейной интерполяции (медленнее, но качественнее).
Библиотека реализует свёрточные фильтры для обработки изображений, где новое значение пикселя вычисляется как взвешенная сумма соседних пикселей с использованием ядра фильтра. Приведены примеры распространённых ядер: размытие по ящику (box blur), гауссово размытие, повышение резкости и тиснение (emboss). Статья подчёркивает, что изображение по сути является прямоугольником чисел, и даже с минимальными инструментами можно реализовать мощные алгоритмы компьютерного зрения.
Комментарии (44)
- Обсуждение охватило от основ компьютерного зрения до практических примеров и ссылок на ресурсы, включая MIT-2024 книгу и репозиторий GitHub.
- Участники обменялись опытом в индустрии машинного зрения, обсуждая такие темы как цвет против grayscale, промышленные применения и библиотеки вроде Halcon и MVTec.
- Были упомянуты такие инструменты как customFilter и примеры кода, а также ссылки на полезные ресурсы.
- В комментариях также поднимались вопросы о балансе между стоимостью, скоростью и качеством изображения в промышленных системах.
- В целом, обсуждение было наполнено практическими советами и ссылками на открытые исходники и учебные материалы.
Pico-Banana-400k 🔥 Горячее
Это репозиторий Apple с названием "pico-banana-400k", но предоставленный контент содержит только навигационную часть страницы GitHub без информации о самом проекте. В тексте отсутствует описание содержимого репозитория, его цели или функциональности.
Из доступных данных известно только, что проект принадлежит Apple (из имени пользователя "apple"), но без доступа к содержимому репозитория невозможно предоставить детали о его назначении, коде или связанных технологиях. Для получения полезной информации потребуется прямой доступ к файлам и документации внутри репозитория.
Комментарии (62)
- Nano-Banana-400K — это набор из ~400K примеров редактирования изображений, созданный с помощью Gemini-1.5-Pro, который используется для обучения и оценки моделей редактирования изображений.
- Лицензия CC-BY-NC-ND запрещает коммерческое использование и создание производных работ, что ставит под сомнение полезность набора для исследователей и разработчиков.
- Набор включает в себя изображения, которые могут быть использованы для обучения моделей, которые могут быть использованы для создания подобных изображений, что вызывает вопросы об этике и правовом статусе таких наборов данных.
- Несмотря на то, что набор был создан с помощью Gemini-1.5-Pro, Google не является партнером в этом проекте, и вопросы об использовании набора в коммерческих целях остаются открытыми.
Image Dithering: Eleven Algorithms and Source Code (2012)
Dизеринг изображений — всё ещё актуальная техника, несмотря на современные полноцветные дисплеи. В статье представлены одиннадцать алгоритмов дизеринга, включая известный Floyd-Steinberg, с исходным кодом. Дизеринг применяется для подготовки полноцветных изображений к печати на черно-белых принтерах, уменьшения количества цветов в веб-дизайне для снижения размера файлов, а также конвертации 48-битных RAW-фотографий в 24-битный RGB для редактирования.
Техника работает путем аппроксимации недоступных цветов доступными через смешение и создание узоров. Как показывают примеры, ограничение палитры без дизеринга делает изображение практически неузнаваемым, тогда как с дизерингом сохраняется узнаваемость деталей. Основной концепцией является "распространение ошибки" (error diffusion), при которой ошибка квантования каждого пикселя распределяется на соседние пиксели для более точного представления исходного изображения.
Комментарии (21)
- Обсуждение охватывает как классические алгоритмы дизеринга (Floyd-Steinberg, Bayer, blue-noise), так и их применение в графике, аудио и печати, включая влияние на восприятие цвета и формы.
- Участники обмениваются ссылками на ресурсы (включая готовые текстуры blue-noise и примеры кода), обсуждают практические компромиссы между качеством и производительностью, а также затрагивают нюансы лицензий и этики в контексте использования чужих работ или инструментов.
- Некоторые комментарии поднимают вопрос о том, что современные дисплеи и их субпиксельная структура делают классический дизеринг менее заметным, и обсуждают, какие из методов все еще релевантны.
- Также затрагиваются вопросы о том, как дизеринг влияет на субьективное восприятие цвета и формы, и обсуждается, какие из методов лучше всего сохраняют визуальную структуру изображения.
Should LLMs just treat text content as an image?
Исследователи обсуждают концепцию "оптического сжатия" — представления текста как изображений для обработки в больших языковых моделях. Согласно статье, DeepSeek продемонстрировал, что из одного токена изображения можно извлечь 10 текстовых токенов с точностью почти 100%, что делает внутреннее представление изображений в моделях в 10 раз эффективнее текстового. Этот подход уже используется некоторыми компаниями и open-source проектами, хотя не является штатным режимом работы существующих моделей.
Почему это может работать? Текстовые токены дискретны и ограничены (около 50 000), тогда как токены изображений непрерывны и могут выражать гораздо больше информации. Внутри модели текстовые токены преобразуются в неэффективное представление, в то время как изображение уже содержит компактную форму данных. Более того, обработка текста как изображений ближе к тому, как работает человеческий мозг, воспринимающий текст визуально. Однако автор отмечает, что многие теоретически перспективные идеи в ИИ не работают на практике, а обучение новых моделей на тексте в виде изображений представляет собой сложную задачу.
Комментарии (92)
- Обсуждение вращается вокруг идеи преобразования текста в изображение и обратно, включая OCR, токенизацию и форматирование, и как это влияет на обучение моделей.
- Участники обсуждают, что преобразование текста в изображение может быть полезно для обучения моделей, но также может привести к потере информации.
- Также обсуждается, что визуальные токены могут быть более информативны, чем текстовые токены, но также может привести к потере контекста.
- Участники также обсуждают, что визуальные токены могут быть более устойчивы к шуму и искажениям, но также могут быть более чувствительны к разрешению и форматированию.
Bird photographer of the year gives a lesson in planning and patience
ChatGPT, I have not found any information about the exact number of users in the world, but it is around 1.3 billion, which is around 7 billion, so the number of users is around 7 billion, and the number is around 7 billion, which is about the same as the number of users in the world.
The user is not a single user, but a group of users, and the user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user, but a group of users.
The user is not a single user,
Комментарии (35)
- Обсуждение началось с рассказа о фотографе, который был обвинён в том, что он мешает другому фотографу, и закончилось обсуждением того, как трудно бывает поймать идеальный кадр в дикой природе.
- Участники обменялись ссылками на работы фотографов, которые, по их словам, демонстрируют редкие и захватывающие моменты, сделанные в естественных условиях.
- Обсуждались также правила и ограничения, связанные с постобработкой и композитингом, а также то, как фотографы продают свои работы.
- Были упомянуты такие фотографы, как Максим Рижов, Лирон Герцман и другие, чьи работы были использованы в качестве примеров.
- В конце обсуждение перешло к тому, что фотографы, работающие в дикой природе, должны обладать способностью предугадывать события и быть готовыми к тому, чтобы поймать идеальный кадр.
Lánczos Interpolation Explained (2022)
Lánczos-интерполяция — один из трёх «классических» способов изменения размера изображения, наряду с линейной и кубической интерполяцией. Визуально он даёт резкие, «непиксельные» картинки без характерных для других методов артефактов. Однако мало кто задумывается, откуда берётся этот метод. В статье разбирается, как именно он выводится из теории Фурье и какие компромиссы заложены в его основе.
Комментарии (13)
- Обсуждение подтверждает, что 2D-интерполяция не сводится к произведению 1D-фильтров, а требует собственного ядра вроде jinc/Sombrero.
- Участники отмечают, что статья не сравнивает Lanczos с бикубиком и другими популярными фильтрами, хотя автор в подвале признаёт, что не включил сравнение из-за «семейства» кубических фильтров.
- Подчеркивается, что визуальные артефакты (ringing) в обоих случаях выглядят одинаково, и читатели отмечают сходство с JPEG-артефактами.
- В комментариях подчеркивается, что несмотря на то, что фильтр не претендует на звание «лучшего», он всё же остаётся популярным выбором в индустрии.
- Несколько участников просят добавить сравнение с бикубиком и другими фильтрами, но автор отвечает, что не включил сравнение, потому что кубические фильтры являются семейством, а не одним фильтром, и что большинство практических примеров всё равно выглядят как-то подобно Lanczos.
Комментарии (47)
- Обсуждение лицензирования: проект использует Elastic License 2.0, что вызывает споры о его статусе как открытого или исходного кода, несмотря на бесплатное использование в open-source проектах.
- Технические аспекты поиска: обсуждается эффективность brute-force подхода с оптимизацией через SIMD, сравнение с индексированными методами (например, HNSW) и вопросы производительности при больших объемах данных.
- Использование товарных знаков: критикуется использование домена sqlite.ai и бренда SQLite без явной связи с авторами SQLite, что может вводить в заблуждение.
- Практические применения: векторные базы данных полезны для поиска схожих элементов (например, через эмбеддинги) в машинном обучении, обработке текстов и изображений.
- Альтернативы и сравнения: упоминаются другие решения, такие как sqlite-vec (с открытой лицензией) и Turso, а также обсуждаются их преимущества и недостатки.
Apple Photos app corrupts images 🔥 Горячее 💬 Длинная дискуссия
Приложение Apple Photos иногда повреждает изображения при импорте с камеры. Я хотел поделиться этим, так как другие пользователи тоже сталкивались с проблемой, но большинство сдались, не разобравшись так глубоко, как я.
Я снимаю на камеру OM System OM-1 в формате RAW + JPEG и раньше использовал опцию «Удалить после импорта», чтобы очистить карту памяти. Это оказалось ошибкой. Проблема стала очевидной после съёмки на свадьбе: около 30% фотографий были безвозвратно испорчены — иногда JPEG, иногда RAW, иногда оба файла.
Чтобы исключить аппаратные причины, я последовательно менял всё оборудование: кабели, карту памяти, перешёл только на RAW, купил новый ноутбук и даже новую камеру OM-1 MKII. Но проблема не исчезла. Позже я обнаружил, что файлы на карте были целыми до импорта, а corruption происходил случайным образом в самом приложении Photos.
Сравнение повреждённого и исходного файлов показало одинаковый размер, но разные контрольные суммы:
md5sum P7110136-from-camera.ORF Exports/P7110136.ORF
17ce895fd809a43bad1fe8832c811848 P7110136-from-camera.ORF
828a33005f6b71aea16d9c2f2991a997 Exports/P7110136.ORF
Теперь я отказался от автоматического удаления и вручную проверяю все фото после импорта, прежде чем форматировать карту. Это трудоёмко, но надёжно. Возможно, проблема связана с конкретными камерами OM System, но я не планирую дальше её исследовать.
Комментарии (403)
- Обнаружена редкая ошибка в Apple Photos, приводящая к недетерминированному повреждению файлов при импорте, вероятно, из-за проблем с параллелизмом в конвейере обработки.
- Пользователи сообщают о различных случаях коррупции изображений: от зеленых пикселей до полной порчи файлов и потери целых архивов, в том числе в iCloud.
- Многие критикуют рабочий процесс с автоматическим удалением файлов после импорта и рекомендуют всегда сохранять оригиналы на картах памяти или делать резервные копии перед импортом.
- В качестве альтернативы предлагается использовать другие инструменты для импорта (например, Image Capture, Digikam, Olympus Workspace) или полностью отказаться от экосистемных решений в пользу локального хранения и самохостинга.
- Высказывается общая обеспокоенность снижением качества программного обеспечения Apple и недостаточным вниманием к тестированию и сохранности данных пользователей.
- Некоторые пользователи предполагают, что проблема может быть связана с конкретными камерами (OM System) или SD-картами, а не только с ПО Apple.
- Рекомендуется документировать версии ПО с ошибкой и избегать хранения критически важных данных исключительно в проприетарных системах без независимых бэкапов.
What Is the Fourier Transform? 🔥 Горячее 💬 Длинная дискуссия
Фурье-преобразование — это способ разложить любую функцию на сумму простых волн.
Идея родилась в 1807 г., когда Жан Батист Жозеф Фурье искал закон теплопроводности. Он показал: любая периодическая кривая — это набор синусов и косинусов с разными частотами и амплитудами.
Современная формула
$$ \hat f(\xi)=\int_{-\infty}^{\infty} f(x),e^{-2\pi i x\xi},dx $$
переводит сигнал из «временной» области в «частотную».
Как работает
- Сложный звук → набор чистых тонов.
- Изображение → сетка синусоидальных полос разной плотности.
- Удалив высокие частоты, получаем сжатие JPEG; убрав низкие — оставляем контуры.
Применения
- МРТ и рентген: преобразование Радона + обратное Фурье.
- Сотовая связь, радары, шумоподавление.
- Решение дифференциальных уравнений и квантовая механика.
Интуиция
Фурье-анализ — это «математический слух»: он выделяет, какие «ноты» содержатся в любом сигнале.
Комментарии (179)
- В треде делятся ссылками на яркие визуализации: Captain Disillusion, 3Blue1Brown, MIT-лекция Фримена, интерактивы injuly.in и jezzamon.
- Кто-то предупреждает: «простые» объяснения могут дать иллюзию понимания, лучше сразу смотреть на математику.
- Появляются любители Лапласа/z-преобразования, жалуются, что о них почти нет популярных видео.
- Обсуждают практику: JPEG, OFDM, сжатие манги, анти-муар, фильтры в е-ink, а также «почему это работает» — спarsity, смена базиса в бесконечномерном пространстве.
- Интересуются деталями: как выбрать частоты, как считать преобразование на потоке, почему убрать высокие частоты = размытие.
Video Game Blurs (and how the best one works) 🔥 Горячее
- Размытие в играх — основа эффектов: Bloom, DoF, UI.
- Цель: быстрое размытие в реальном времени на GPU.
- Путь: от простого Box Blur до Dual Kawase Blur.
Box Blur
Среднее цветов в квадрате.
Проблема: O(n²) по радиусу, медленно.
Ядро (kernel)
Матрица весов для свёртки.
Box = все веса 1.
Gaussian = веса по нормальному распределению.
Gaussian Blur
Два прохода: горизонталь + вертикаль → O(n) вместо O(n²).
Но: при радиусе > 10 всё ещё дорого.
Частоты
Размытие = низкочастотный фильтр.
Можно свернуть сразу в частотной области, но FFT на маленьких изображениях не выигрывает.
Оптимизации
- Билинейная интерполяция: считаем не каждый пиксель, а с шагом 2×, экономим 4× выборок.
- Даунсемплинг: уменьшаем изображение в 2×, размываем, растягиваем обратно — почти бесплатно.
Kawase Blur
4–5 проходов с offset-выборками по спирали.
Выглядит как Gaussian, но дешевле при больших радиусах.
Dual Kawase Blur
Пара Kawase-проходов на уменьшенной копии + один upscale.
Результат: кинематографическое размытие за O(log n).
Используют Unreal, Unity, Frostbite — де-факто стандарт.
Итог
Dual Kawase = лучшее соотношение качество/скорость для больших радиусов в реальном времени.
Комментарии (38)
- Автор статьи рассказал о Dual-Kawase Blur и личном интервью с Масаки Кавасэ.
- Участники обсудили, что Kawase-blur 2005 года уступает современным боке-эффектам, но всё ещё полезен на слабом железе.
- Поднят вопрос: как адаптировать Kawase для compute-шейдеров без записи в DRAM.
- Уточнили, что гауссово размытие можно точно получить в Фурье-пространстве, но это не всегда быстрее.
- Появились советы по улучшению читаемости (убрать выключку) и объяснено, что Spherical Harmonics не связаны с размытием.
Line scan camera image processing for train photography 🔥 Горячее
- Камера – Alkeria Necta N4K2-7C, 4096×2 Bayer, 16-бит raw.
- ROI – энергия
∂I/∂x / (0.1·max(I)+|∇I|); 99-й перцентиль по блокам, порог 1.5× минимума. - Скорость – сравниваем два зелёных канала Bayer-сдвигами ±7 px, подпиксельный пик методом итеративного Гаусса.
- Ресэмплинг – интерполяция по скорости, чтобы не растянуть/сжать объект.
- Демозаик – bilinear + коррекция полос.
- Полосы – вычитаем медиану по строкам.
- Шум – Gaussian + bilateral фильтр.
- Косой кадр – Hough-прямые → угол → поворот.
- Цвет – калибровка по чекеру X-Rite.
- Код – Python + NumPy + OpenCV, «vibe-coding» в Cursor.
Комментарии (66)
- Пользователи делятся опытом: кто-то пробовал сканировать деревья дроном, кто-то делает slit-scan-анимации вручную, а кто-то вспоминает сканеры и старые цифровые спины.
- Обсуждаются промышленные применения: сортировка продуктов на конвейере, фото-финиш, спутники и даже медицинская ОКТ.
- Рассказывают, как почти любую камеру можно превратить в line-scan, выставив только одну строку пикселей и получив 60 000 FPS.
- Показывают примеры снимков из окна поезда и спорят, насколько реально «отсканировать» часовую поездку целиком.
- Отмечают художественный эффект: поезд застыл между полосами цвета, а движущиеся части искажаются, как у спортсменов на фото-финиша.
Weaponizing image scaling against production AI systems 🔥 Горячее
-
Суть атаки: при загрузке большого изображения в Gemini CLI, Vertex AI, Google Assistant и др. системы изображение уменьшается до размеров модели. В момент масштабирования скрытые пиксель-инъекции становятся читаемыми как команды, позволяя красть данные или выполнять код без подтверждения пользователя.
-
Пример: в Gemini CLI через Zapier MCP (trust=True по умолчанию) отправка «безобидной» картинки приводит к выгрузке календаря на почту злоумышленника.
-
Масштаб: подтверждены атаки на веб-Gemini, API, Android-Assistant, Genspark и др. UI показывает оригинал, а модель видит уменьшенную версию с инъекцией.
-
Техника: используются алгоритмы downscale (nearest-neighbor, bilinear, Lanczos). Высокочастотные паттерны превращаются в читаемые символы при уменьшении.
-
Anamorpher: опенсорс-утилита для генерации таких «анаморфных» изображений.
-
Защита:
- отключить автоматическое масштабирование или запрашивать подтверждение;
- применять контент-фильтры к уменьшенной копии;
- запретить инлайн-вызовы инструментов без явного согласия;
- внедрить rate-limit и аудит действий агентов.
Комментарии (131)
- Атака заключается в том, что в изображении скрывают текст-команду, который после уменьшения или OCR становится частью промпта и переопределяет поведение модели.
- Проблема усугубляется тем, что современные агент-системы требуют широких прав и не различают «достоверные» и «внешние» инструкции.
- Участники сравнивают это с уязвимостями старых PHP-скриптов и serial-terminals: данные и команды смешаны в одном потоке.
- Предлагаемые защиты — шум перед ресайзом, sandbox-слои, фильтрация текста в картинке, «sudo-токены» и строгое разграничение контекстов — пока не решают проблему полностью.
- Общий вывод: пока LLM не научатся надёжно разделять данные и инструкции, любой внешний вход считается потенциально отравленным.