Hacker News Digest

Тег: #image-processing

Постов: 13

Avería: The Average Font (2011) (iotic.com)

Автор создал новый шрифт Avería, усреднив все шрифты на своём компьютере. Идея родилась из интереса к типографике и креативному программированию. Сначала он накладывал буквы разных шрифтов с низкой прозрачностью, а затем использовал ImageMagick и PHP для математического усреднения изображений. Выравнивание по базовой линии и началу координат дало более чёткие результаты, чем простое наложение. Автор обнаружил, что строчная буква 'g' имеет две распространённые формы, а большинство шрифтов демонстрируют высокую корреляцию.

Когда простой метод дал размытые результаты, автор начал искать способы сохранить чёткие края. Он экспериментировал с пороговыми значениями для создания монохромных изображений, но столкнулся со сложностью математического усреднения форм. После изучения крив Безье и метрик шрифтов, он выбрал простой подход: разбиение контура каждой буквы на 500 равноотстоящих точек и усреднение соответствующих позиций. За месяц работы над проектом он создал Avería — название, связанное со словом "average" (среднее), но на испанском означающее "поломка".

by JoshTriplett • 08 ноября 2025 г. в 19:29 • 210 points

ОригиналHN

#php#imagemagick#typography#font-design#bezier-curves#image-processing

Комментарии (37)

  • Обсуждение началось с демонстрацией шрифта Averia как примера "усреднённого" шрифта, что вызвало обсуждение его визуального качества и ассоциаций с "uncanny valley".
  • Участники обсудили, что Averia выглядит мутновато и непривычно, что вызвало дискуссию о том, какие именно параметры делают шрифт читаемым и приятным.
  • Были подняты вопросы о том, как средний шрифт может влиять на читаемость и какие именно параметры делают его таким.
  • Также обсуждались вопросы авторского права и атрибуции, так как Averia был создан как "усреднение" всех шрифтов в системе.
  • Участники также затронули тему того, что именно делает шрифт визуально привлекательным и читаемым, и какие параметры важны для этого.

By the Power of Grayscale (zserge.com)

Статья представляет собой руководство по созданию минимальной библиотеки компьютерного зрения Grayskull, использующей только 8-битные изображения в градациях серого, обычный C и простые структуры данных. Автор демонстрирует базовые операции с пикселями: инвертирование, зеркалирование, копирование, обрезку и изменение размера. Особое внимание уделено двум методам масштабирования - ближайшего соседа (быстрый, но с блоками) и билинейной интерполяции (медленнее, но качественнее).

Библиотека реализует свёрточные фильтры для обработки изображений, где новое значение пикселя вычисляется как взвешенная сумма соседних пикселей с использованием ядра фильтра. Приведены примеры распространённых ядер: размытие по ящику (box blur), гауссово размытие, повышение резкости и тиснение (emboss). Статья подчёркивает, что изображение по сути является прямоугольником чисел, и даже с минимальными инструментами можно реализовать мощные алгоритмы компьютерного зрения.

by surprisetalk • 31 октября 2025 г. в 12:11 • 235 points

ОригиналHN

#computer-vision#image-processing#c#grayscale#image-filtering#convolution#machine-vision#halcon#mvtec

Комментарии (44)

  • Обсуждение охватило от основ компьютерного зрения до практических примеров и ссылок на ресурсы, включая MIT-2024 книгу и репозиторий GitHub.
  • Участники обменялись опытом в индустрии машинного зрения, обсуждая такие темы как цвет против grayscale, промышленные применения и библиотеки вроде Halcon и MVTec.
  • Были упомянуты такие инструменты как customFilter и примеры кода, а также ссылки на полезные ресурсы.
  • В комментариях также поднимались вопросы о балансе между стоимостью, скоростью и качеством изображения в промышленных системах.
  • В целом, обсуждение было наполнено практическими советами и ссылками на открытые исходники и учебные материалы.

Pico-Banana-400k (github.com) 🔥 Горячее

Это репозиторий Apple с названием "pico-banana-400k", но предоставленный контент содержит только навигационную часть страницы GitHub без информации о самом проекте. В тексте отсутствует описание содержимого репозитория, его цели или функциональности.

Из доступных данных известно только, что проект принадлежит Apple (из имени пользователя "apple"), но без доступа к содержимому репозитория невозможно предоставить детали о его назначении, коде или связанных технологиях. Для получения полезной информации потребуется прямой доступ к файлам и документации внутри репозитория.

by dvrp • 26 октября 2025 г. в 02:01 • 378 points

ОригиналHN

#apple#gemini-1.5-pro#image-processing#machine-learning#dataset#github

Комментарии (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) (tannerhelland.com)

Dизеринг изображений — всё ещё актуальная техника, несмотря на современные полноцветные дисплеи. В статье представлены одиннадцать алгоритмов дизеринга, включая известный Floyd-Steinberg, с исходным кодом. Дизеринг применяется для подготовки полноцветных изображений к печати на черно-белых принтерах, уменьшения количества цветов в веб-дизайне для снижения размера файлов, а также конвертации 48-битных RAW-фотографий в 24-битный RGB для редактирования.

Техника работает путем аппроксимации недоступных цветов доступными через смешение и создание узоров. Как показывают примеры, ограничение палитры без дизеринга делает изображение практически неузнаваемым, тогда как с дизерингом сохраняется узнаваемость деталей. Основной концепцией является "распространение ошибки" (error diffusion), при которой ошибка квантования каждого пикселя распределяется на соседние пиксели для более точного представления исходного изображения.

by Bogdanp • 24 октября 2025 г. в 19:38 • 88 points

ОригиналHN

#image-processing#dithering#floyd-steinberg#color-management#error-diffusion#bayer#blue-noise#graphics#image-compression#printing

Комментарии (21)

  • Обсуждение охватывает как классические алгоритмы дизеринга (Floyd-Steinberg, Bayer, blue-noise), так и их применение в графике, аудио и печати, включая влияние на восприятие цвета и формы.
  • Участники обмениваются ссылками на ресурсы (включая готовые текстуры blue-noise и примеры кода), обсуждают практические компромиссы между качеством и производительностью, а также затрагивают нюансы лицензий и этики в контексте использования чужих работ или инструментов.
  • Некоторые комментарии поднимают вопрос о том, что современные дисплеи и их субпиксельная структура делают классический дизеринг менее заметным, и обсуждают, какие из методов все еще релевантны.
  • Также затрагиваются вопросы о том, как дизеринг влияет на субьективное восприятие цвета и формы, и обсуждается, какие из методов лучше всего сохраняют визуальную структуру изображения.

Should LLMs just treat text content as an image? (seangoedecke.com)

Исследователи обсуждают концепцию "оптического сжатия" — представления текста как изображений для обработки в больших языковых моделях. Согласно статье, DeepSeek продемонстрировал, что из одного токена изображения можно извлечь 10 текстовых токенов с точностью почти 100%, что делает внутреннее представление изображений в моделях в 10 раз эффективнее текстового. Этот подход уже используется некоторыми компаниями и open-source проектами, хотя не является штатным режимом работы существующих моделей.

Почему это может работать? Текстовые токены дискретны и ограничены (около 50 000), тогда как токены изображений непрерывны и могут выражать гораздо больше информации. Внутри модели текстовые токены преобразуются в неэффективное представление, в то время как изображение уже содержит компактную форму данных. Более того, обработка текста как изображений ближе к тому, как работает человеческий мозг, воспринимающий текст визуально. Однако автор отмечает, что многие теоретически перспективные идеи в ИИ не работают на практике, а обучение новых моделей на тексте в виде изображений представляет собой сложную задачу.

by ingve • 21 октября 2025 г. в 06:10 • 153 points

ОригиналHN

#llm#text-processing#image-processing#deepseek#ocr#tokenization#machine-learning#data-compression

Комментарии (92)

  • Обсуждение вращается вокруг идеи преобразования текста в изображение и обратно, включая OCR, токенизацию и форматирование, и как это влияет на обучение моделей.
  • Участники обсуждают, что преобразование текста в изображение может быть полезно для обучения моделей, но также может привести к потере информации.
  • Также обсуждается, что визуальные токены могут быть более информативны, чем текстовые токены, но также может привести к потере контекста.
  • Участники также обсуждают, что визуальные токены могут быть более устойчивы к шуму и искажениям, но также могут быть более чувствительны к разрешению и форматированию.

Bird photographer of the year gives a lesson in planning and patience (thisiscolossal.com)

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,

by surprisetalk • 06 октября 2025 г. в 02:53 • 161 points

ОригиналHN

#photography#image-processing

Комментарии (35)

  • Обсуждение началось с рассказа о фотографе, который был обвинён в том, что он мешает другому фотографу, и закончилось обсуждением того, как трудно бывает поймать идеальный кадр в дикой природе.
  • Участники обменялись ссылками на работы фотографов, которые, по их словам, демонстрируют редкие и захватывающие моменты, сделанные в естественных условиях.
  • Обсуждались также правила и ограничения, связанные с постобработкой и композитингом, а также то, как фотографы продают свои работы.
  • Были упомянуты такие фотографы, как Максим Рижов, Лирон Герцман и другие, чьи работы были использованы в качестве примеров.
  • В конце обсуждение перешло к тому, что фотографы, работающие в дикой природе, должны обладать способностью предугадывать события и быть готовыми к тому, чтобы поймать идеальный кадр.

Lánczos Interpolation Explained (2022) (mazzo.li)

Lánczos-интерполяция — один из трёх «классических» способов изменения размера изображения, наряду с линейной и кубической интерполяцией. Визуально он даёт резкие, «непиксельные» картинки без характерных для других методов артефактов. Однако мало кто задумывается, откуда берётся этот метод. В статье разбирается, как именно он выводится из теории Фурье и какие компромиссы заложены в его основе.

by tobr • 05 октября 2025 г. в 07:49 • 150 points

ОригиналHN

#lanczos-interpolation#image-processing#fourier-transform#filtering#jpeg#2d-interpolation#signal-processing

Комментарии (13)

  • Обсуждение подтверждает, что 2D-интерполяция не сводится к произведению 1D-фильтров, а требует собственного ядра вроде jinc/Sombrero.
  • Участники отмечают, что статья не сравнивает Lanczos с бикубиком и другими популярными фильтрами, хотя автор в подвале признаёт, что не включил сравнение из-за «семейства» кубических фильтров.
  • Подчеркивается, что визуальные артефакты (ringing) в обоих случаях выглядят одинаково, и читатели отмечают сходство с JPEG-артефактами.
  • В комментариях подчеркивается, что несмотря на то, что фильтр не претендует на звание «лучшего», он всё же остаётся популярным выбором в индустрии.
  • Несколько участников просят добавить сравнение с бикубиком и другими фильтрами, но автор отвечает, что не включил сравнение, потому что кубические фильтры являются семейством, а не одним фильтром, и что большинство практических примеров всё равно выглядят как-то подобно Lanczos.

Ultra efficient vector extension for SQLite (marcobambini.substack.com)

by marcobambini • 23 сентября 2025 г. в 14:33 • 136 points

ОригиналHN

#sqlite#vector-search#hnsw#simd#turso#sqlite-vec#machine-learning#text-processing#image-processing

Комментарии (47)

  • Обсуждение лицензирования: проект использует Elastic License 2.0, что вызывает споры о его статусе как открытого или исходного кода, несмотря на бесплатное использование в open-source проектах.
  • Технические аспекты поиска: обсуждается эффективность brute-force подхода с оптимизацией через SIMD, сравнение с индексированными методами (например, HNSW) и вопросы производительности при больших объемах данных.
  • Использование товарных знаков: критикуется использование домена sqlite.ai и бренда SQLite без явной связи с авторами SQLite, что может вводить в заблуждение.
  • Практические применения: векторные базы данных полезны для поиска схожих элементов (например, через эмбеддинги) в машинном обучении, обработке текстов и изображений.
  • Альтернативы и сравнения: упоминаются другие решения, такие как sqlite-vec (с открытой лицензией) и Turso, а также обсуждаются их преимущества и недостатки.

Apple Photos app corrupts images (tenderlovemaking.com) 🔥 Горячее 💬 Длинная дискуссия

Приложение 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, но я не планирую дальше её исследовать.

by pattyj • 17 сентября 2025 г. в 11:07 • 1129 points

ОригиналHN

#apple#icloud#image-processing#file-corruption#data-integrity#backup#raw-image-format#jpeg

Комментарии (403)

  • Обнаружена редкая ошибка в Apple Photos, приводящая к недетерминированному повреждению файлов при импорте, вероятно, из-за проблем с параллелизмом в конвейере обработки.
  • Пользователи сообщают о различных случаях коррупции изображений: от зеленых пикселей до полной порчи файлов и потери целых архивов, в том числе в iCloud.
  • Многие критикуют рабочий процесс с автоматическим удалением файлов после импорта и рекомендуют всегда сохранять оригиналы на картах памяти или делать резервные копии перед импортом.
  • В качестве альтернативы предлагается использовать другие инструменты для импорта (например, Image Capture, Digikam, Olympus Workspace) или полностью отказаться от экосистемных решений в пользу локального хранения и самохостинга.
  • Высказывается общая обеспокоенность снижением качества программного обеспечения Apple и недостаточным вниманием к тестированию и сохранности данных пользователей.
  • Некоторые пользователи предполагают, что проблема может быть связана с конкретными камерами (OM System) или SD-картами, а не только с ПО Apple.
  • Рекомендуется документировать версии ПО с ошибкой и избегать хранения критически важных данных исключительно в проприетарных системах без независимых бэкапов.

What Is the Fourier Transform? (quantamagazine.org) 🔥 Горячее 💬 Длинная дискуссия

Фурье-преобразование — это способ разложить любую функцию на сумму простых волн.

Идея родилась в 1807 г., когда Жан Батист Жозеф Фурье искал закон теплопроводности. Он показал: любая периодическая кривая — это набор синусов и косинусов с разными частотами и амплитудами.

Современная формула
$$ \hat f(\xi)=\int_{-\infty}^{\infty} f(x),e^{-2\pi i x\xi},dx $$
переводит сигнал из «временной» области в «частотную».

Как работает

  • Сложный звук → набор чистых тонов.
  • Изображение → сетка синусоидальных полос разной плотности.
  • Удалив высокие частоты, получаем сжатие JPEG; убрав низкие — оставляем контуры.

Применения

  • МРТ и рентген: преобразование Радона + обратное Фурье.
  • Сотовая связь, радары, шумоподавление.
  • Решение дифференциальных уравнений и квантовая механика.

Интуиция
Фурье-анализ — это «математический слух»: он выделяет, какие «ноты» содержатся в любом сигнале.

by rbanffy • 04 сентября 2025 г. в 22:11 • 405 points

ОригиналHN

#fourier-transform#mathematics#signal-processing#image-processing#jpeg#quantum-mechanics#differential-equations#ofdm#radon-transform

Комментарии (179)

  • В треде делятся ссылками на яркие визуализации: Captain Disillusion, 3Blue1Brown, MIT-лекция Фримена, интерактивы injuly.in и jezzamon.
  • Кто-то предупреждает: «простые» объяснения могут дать иллюзию понимания, лучше сразу смотреть на математику.
  • Появляются любители Лапласа/z-преобразования, жалуются, что о них почти нет популярных видео.
  • Обсуждают практику: JPEG, OFDM, сжатие манги, анти-муар, фильтры в е-ink, а также «почему это работает» — спarsity, смена базиса в бесконечномерном пространстве.
  • Интересуются деталями: как выбрать частоты, как считать преобразование на потоке, почему убрать высокие частоты = размытие.

Video Game Blurs (and how the best one works) (blog.frost.kiwi) 🔥 Горячее

  • Размытие в играх — основа эффектов: 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 = лучшее соотношение качество/скорость для больших радиусов в реальном времени.

by todsacerdoti • 03 сентября 2025 г. в 11:27 • 256 points

ОригиналHN

#gpu#graphics-programming#shaders#image-processing#game-development#real-time-rendering#unreal#unity#frostbite

Комментарии (38)

  • Автор статьи рассказал о Dual-Kawase Blur и личном интервью с Масаки Кавасэ.
  • Участники обсудили, что Kawase-blur 2005 года уступает современным боке-эффектам, но всё ещё полезен на слабом железе.
  • Поднят вопрос: как адаптировать Kawase для compute-шейдеров без записи в DRAM.
  • Уточнили, что гауссово размытие можно точно получить в Фурье-пространстве, но это не всегда быстрее.
  • Появились советы по улучшению читаемости (убрать выключку) и объяснено, что Spherical Harmonics не связаны с размытием.

Line scan camera image processing for train photography (daniel.lawrence.lu) 🔥 Горячее

  • Камера – 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.

by dllu • 23 августа 2025 г. в 16:09 • 413 points

ОригиналHN

#python#numpy#opencv#image-processing#computer-vision#line-scan-camera#bayer-filter#gaussian-filter#bilinear-interpolation#hough-transform

Комментарии (66)

  • Пользователи делятся опытом: кто-то пробовал сканировать деревья дроном, кто-то делает slit-scan-анимации вручную, а кто-то вспоминает сканеры и старые цифровые спины.
  • Обсуждаются промышленные применения: сортировка продуктов на конвейере, фото-финиш, спутники и даже медицинская ОКТ.
  • Рассказывают, как почти любую камеру можно превратить в line-scan, выставив только одну строку пикселей и получив 60 000 FPS.
  • Показывают примеры снимков из окна поезда и спорят, насколько реально «отсканировать» часовую поездку целиком.
  • Отмечают художественный эффект: поезд застыл между полосами цвета, а движущиеся части искажаются, как у спортсменов на фото-финиша.

Weaponizing image scaling against production AI systems (blog.trailofbits.com) 🔥 Горячее

  • Суть атаки: при загрузке большого изображения в 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 и аудит действий агентов.

by tatersolid • 21 августа 2025 г. в 12:20 • 468 points

ОригиналHN

#llm#security#cybersecurity#image-processing#google#gemini#vertex-ai#zapier

Комментарии (131)

  • Атака заключается в том, что в изображении скрывают текст-команду, который после уменьшения или OCR становится частью промпта и переопределяет поведение модели.
  • Проблема усугубляется тем, что современные агент-системы требуют широких прав и не различают «достоверные» и «внешние» инструкции.
  • Участники сравнивают это с уязвимостями старых PHP-скриптов и serial-terminals: данные и команды смешаны в одном потоке.
  • Предлагаемые защиты — шум перед ресайзом, sandbox-слои, фильтрация текста в картинке, «sudo-токены» и строгое разграничение контекстов — пока не решают проблему полностью.
  • Общий вывод: пока LLM не научатся надёжно разделять данные и инструкции, любой внешний вход считается потенциально отравленным.