Еще вчера фотография была «доказательством» того, что событие произошло. Сегодня любой школьник может сгенерировать или изменить изображение до неузнаваемости с помощью ИИ. Индустрия цифровой-криминалистики пытается угнаться за технологиями, разрабатывая все новые детекторы фальсификаций. Но что, если подойти к проблеме с другой стороны? Не искать следы конкретного алгоритма генерации, а задать более фундаментальный вопрос: насколько естественны статистические свойства этого изображения?

В этой статье мы не предложим вам волшебную таблетку для детекции фейковых картинок. Это интеллектуальный эксперимент. Возьмем известный математический закон — закон Бенфорда — и попробуем применить его для анализа изображений. Мы реализуем этот метод на чистом JavaScript, чтобы любой желающий мог поэкспериментировать в собственном браузере, и обсудим результаты, философские вопросы и технические подводные камни, которые ждут нас на этом пути.

1. Что такое закон Бенфорда?

Прежде чем мы загрузим первое изображение, давайте разберемся с нашим главным инструментом. Закон Бенфорда, или закон первой значащей цифры — это эмпирическое наблюдение, гласящее, что в многих реально существующих наборах численных данных (например, площади стран, население городов, биржевые котировки, физические константы) цифра 1 встречается на первой позиции гораздо чаще, чем другие цифры.

Вот как выглядит эталонное распределение Бенфорда для первых цифр от 1 до 9:


Цифра 2: 17.6%

Цифра 3: 12.5%

Цифра 4: 9.7%

Цифра 5: 7.9%

Цифра 6: 6.7%

Цифра 7: 5.8%

Цифра 8: 5.1%

Цифра 9: 4.6%

Этот закон работает для данных, которые охватывают несколько порядков величин и являются результатом процессов, близких к мультипликативным. Классический пример — его использование для выявления финансовых махинаций: сфальсифицированные отчеты часто интуитивно распределяют первые цифры равномерно (~11.1% на каждую), что и выдает мошенников.

Но при чем тут изображения? — спросите вы. Идея в следующем: натуральное изображение, снятое камерой в реальном мире, — это тоже продукт сложного набора естественных процессов (оптика, физика света, свойства материалов). Оно не «придумано» человеком или алгоритмом, стремящимся к равномерному распределению. Его пиксели и, что важнее, их частотные представления, могут нести в себе статистические следы этой «естественности». А вот сгенерированное или грубо отредактированное изображение может эти закономерности нарушать.

2. От пикселей к цифрам: архитектура анализатора

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

Шаг 1: Подготовка изображения.

Изображение конвертируется в оттенки серого. Это необходимо, чтобы работать с одним каналом вместо трех, и потому что закон Бенфорда применяется к числовым данным, а цвет здесь может внести ненужную избыточность. Если изображение слишком большое, оно масштабируется для оптимизации производительности. Да, тут возникает справедливый вопрос о влиянии таких трансформаций на результат. Ответ мы пока сами не знаем.

Шаг 2: Разбиение на блоки.

Изображение разбивается на блоки заданного размера (по умолчанию 8x8 пикселей). Почему? Потому что мы будем анализировать не сами пиксели (их значения часто сжаты и не несут нужной статистики), а их частотные характеристики. Работа с блоками — это стандартный подход в обработке изображений, унаследованный от алгоритма JPEG.

Шаг 3: Дискретное косинусное преобразование (DCT).

Для каждого блока 8x8 применяется DCT. Это ключевой шаг. DCT переводит блок из пространственной области (значения яркости пикселей) в частотную. На выходе мы получаем матрицу 8x8 коэффициентов:

Коэффициент (0,0) — это так называемый DC-коэффициент. Он представляет собой среднюю яркость всего блока.

Все остальные коэффициенты — это AC-коэффициенты. Они описывают детали и текстуры изображения на разных частотах: от низких (грубые детали) до высоких (мелкие детали и шум).

Нас интересуют именно AC-коэффициенты. Их значения могут быть положительными и отрицательными, большими и маленькими — идеальный кандидат для анализа по Бенфорду. Хотя и тут не все просто, анализ отрицательных значений может и не самая лучшая идея.

Шаг 4: Извлечение первых значащих цифр.

Мы проходим по всем AC-коэффициентам всех блоков изображения. Для каждого коэффициента мы:

Берем его абсолютное значение (нас интересует величина, а не знак).

Извлекаем первую значащую цифру. Для очень больших или очень маленьких чисел это делается через экспоненциальную запись, чтобы избежать ошибок округления.
Например, коэффициент 0.00345 даст нам цифру 3 (3.45e-3), а коэффициент 12560 даст цифру 1 (1.256e4).

Шаг 5: Сравнение с эталоном через KL-дивергенцию.

Мы строим гистограмму распределения первых цифр для нашего изображения. Теперь нужно количественно оценить, насколько она похожа на эталонное распределение Бенфорда. Для этого используется дивергенция Кульбака-Лейблера (Kullback–Leibler divergence).

Простыми словами, KL-дивергенция показывает, сколько информации теряется при попытке описать одно распределение (наше) с помощью другого (Бенфорда). Чем ниже значение KL-дивергенции, тем ближе наше распределение к идеалу Бенфорда, и, гипотетически, тем «естественнее» изображение.

3. За кулисами: техническая реализация на Web-технологиях

Теория это хорошо, но интересно увидеть живьем, хотя бы на простенькой программе. Поэтому написали небольшую веб-страницу с демонстрацией работы.

Внешний вид программы
Внешний вид программы

Интерфейс: Чистый HTML, CSS и Vanilla JavaScript. Никаких тяжелых фреймворков. Это позволяет проекту оставаться легким, понятным для изучения и работающим везде, где есть браузер.

Обработка в главном потоке vs. Web Workers. Анализ изображения — ресурсоемкая задача. Если делать ее в основном потоке, браузер зависнет на время расчета. Поэтому вся тяжелая работа вынесена в Web Worker — отдельный поток, который не блокирует интерфейс. Пользователь видит плавный прогресс-бар.

Оптимизации: Алгоритм DCT реализован с предвычислением косинусов для ускорения расчетов. Работа с TypedArrays (Float32Array) обеспечивает высокую скорость обработки числовых данных.

Безопасность и конфиденциальность. Все вычисления происходят локально, в вашем браузере. Изображения никуда не загружаются. Это важно для конфиденциальности и позволяет обрабатывать чувствительные данные. Ну мало ли, какие картинки вы захотите проверить на естественность.

4. Инструкция к применению: как запустить эксперимент самостоятельно

Перейдите на страницу программы.

Загрузите изображения. Перетащите в окно браузера или кликните для выбора файлов. Можно загрузить несколько сразу. Поддерживаются JPEG, PNG, WebP.

Настройте параметры (опционально):

Размер блоков: 8x8 — стандарт, но можно поэкспериментировать с 4x4 (более детально, но шумно) или 16x16/32x32 (более глобально, но долго, особенно на слабых компьютерах).

Порог фильтрации: Задайте максимальное значение KL-дивергенции для отбора «естественных» изображений в архив. Начните с 0.05.

Нажмите «Анализировать» и наблюдайте за прогрессом.

Изучите результаты. Изображения отсортированы по KL-дивергенции. Для каждого файла показана сама метрика, размер блоков и время обработки.

Используйте инструменты:

Просмотр: Кликните на превью или кнопку, чтобы детально изучить изображение.

Экспорт в CSV: Выгрузите таблицу с результатами для дальнейшего анализа в Excel или Python.

Создать архив: Программа соберет в ZIP-файл все изображения, чья KL-дивергенция ниже заданного порога. Это отличный способ быстро отфильтровать коллекцию.

5. Ожидание vs. Реальность: что показали тесты?

А теперь самое интересное. Работает ли это? Ответ неоднозначен и поэтому крайне любопытен.

Что ожидалось: Настоящие фотографии будут иметь низкую KL-дивергенцию (близкую к 0), а сгенерированные ИИ или отредактированные — высокую.

Что показали эксперименты (как и было отмечено во вступлении):

Простая графика, иконки, скриншоты, изображения с неестественными цветовыми градиентами — уверенно показывают высокую KL-дивергенцию. Их статистика сильно отклоняется от Бенфорда. Программа легко их обнаруживает.

Качественные фотографии с натуральной сценой (пейзажи, портреты с хорошей детализацией) — показывают низкую KL-дивергенцию. Их частотные коэффициенты прекрасно подчиняются закону.

Сгенерированные изображения низкого качества или с артефактами — часто «ловятся» и показывают высокие значения.

А теперь сюрприз: высококачественные изображения, сгенерированные современными моделями (Stable Diffusion 3, Midjourney v6) — зачастую имеют низкую KL-дивергенцию и статистически неотличимы от реальных фотографий по этому критерию. Даже когда на них люди с шестью пальцами и тремя глазами.

Почему так происходит?

Это самый глубокий момент всего исследования. Современные генеративные модели обучаются на гигантских массивах реальных изображений. Они не просто учатся рисовать котиков, они "учатся" фундаментальному-распределению пикселей и их взаимосвязям. Фактически, они "учатся" симулировать саму «естественность», в том числе и ее статистические проявления, такие как распределение частотных коэффициентов.

Они не просто копируют картинки, они повторяют принципы, по которым эти картинки устроены. И закон Бенфорда, судя по всему, является одним из таких фундаментальных принципов, который успешно «впитывается» моделью в процессе обучения.

6. Ограничения, выводы и философия «цифровой естественности»

Наш эксперимент показал, что закон Бенфорда — вовсе не панацея для детекции AI-генерации. Он не сможет надежно отличить современный AI-арт от фотографии.

Так в чем же ценность этого исследования?

Оно подтверждает фундаментальную идею: «Естественность» цифровых данных имеет измеримые статистические корреляты. Закон Бенфорда — лишь один из возможных инструментов для ее измерения.

Оно задает новые вопросы:

Если современные генеративные модели так хорошо научились имитировать распределение Бенфорда в частотной области, то какие другие, более сложные статистические метрики они пока еще не освоили?

Чем тензор данных, порожденный реальным физическим процессом, фундаментально отличается от тензора, порожденного статистической моделью, даже если они совпадают по некоторым параметрам? Где искать эту разницу?

Является ли «естественность» единым понятием или это иерархия все более сложных и тонких статистических закономерностей?

Поле для экспериментов огромно. Можно добавить анализ других метрик (дистанция Вассерштейна, анализ фазового спектра), комбинировать подходы, подключать машинное обучение для классификации на основе множества признаков. Но вывод простой и сложный одновременно. Мы нашли не готовое решение а новые вопросы об устройстве цифровой реальности. Мы пока в этом мало что понимаем, интересно послушать ваше мнение.

Заключение: Приглашение к эксперименту

Эта статья и программа — не точка, а приглашение к диалогу и совместному исследованию. Кому интересно, попробуйте загрузить свои наборы изображений. Сравните фотографии с разных камер. Проанализируйте картинки из разных версий Stable Diffusion или DALL-E. Посмотрите, как влияет на метрику JPEG-сжатие или фильтры. Поделитесь своими находками в комментариях. Какой самый низкий и самый высокий показатель KL-дивергенции вам удалось получить? Нашли ли вы тип изображений, который стабильно «обманывает» алгоритм?

Кто знает, может полезное знание совсем рядом. У нас не получилось, а вы его откроете.

Ссылки и ресурсы:

Живая демонстрация:

Документация пользователя:

Подробнее о KL-дивергенции:

Подробнее о дискретном косинусном преобразовании:

Спасибо за внимание, и удачных экспериментов!

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


  1. artptr86
    16.09.2025 16:08

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

    Они не просто копируют картинки, они повторяют принципы, по которым эти картинки устроены. И закон Бенфорда, судя по всему, является одним из таких фундаментальных принципов, который успешно «впитывается» моделью в процессе обучения.

    Кажется очевидным, что распределение DCT-коэффициентов фотореалистичного изображения будет в целом близким к настоящим фотографиям. Также как и сгенерированный нейросеткой текст будет подчиняться закону Ципфа. Вы просто взяли неподходящую метрику.


  1. NightKiro
    16.09.2025 16:08

    Когда знал результат эксперимента до конца прочтения статьи

    Но метрика интересная. Если придумать как-то адекватно переводить текст в подобные блоки, и смотреть распределение, возможно получится. Люди действительно любят фальсифицировать, в то время как нейронка обучена на "идеальных" текстах, а значит и выдавать будет реалистичные значения


  1. sasha_solo
    16.09.2025 16:08

    Очень интересно! Но я бы вам порекомендовал использовать преобразование фурье вместо DCT. По той причине, что результат DCT не очень подходит для аналитики. Он неплох для, например, преобразования данных, эквализации. или квантизации, как в JPG. Но там очень трудно понять, что происходит, даже если вы уберете знаки и сделаете все позитивным. Лучше всего для аналитики делать преобразование фурье и найти амплитуды. даже визуально, попробуйте нарисовать амплитуды от FFT или результат вашего DCT. Сразу увидите, насколько приятно и правильно выглядит результат фурье и насколько зубасто даже абсолютные значения DCT будут выглядеть.


  1. aamonster
    16.09.2025 16:08

    Сразу было понятно, что у автора ничего не получится. Плохо, когда закон Бенфорда воспринимается, как какая-то магия, без понимания, откуда он взялся.

    Так что нет, пока никакого "диалога и совместных исследований" – для того, чтобы их начать, надо хоть немного подтянуть автора в теории.