Nano Hash - криптовалюты, майнинг, программирование

Проблема с обратимостью преобразования Фурье в Numpy

Я пытаюсь псевдослучайно изменить фазу изображения в области Фурье, сохраняя при этом ту же величину, чтобы получить зашумленное изображение. Вот код для этого:

import numpy as np
import matplotlib.pyplot as plt
import cv2

img_orig = cv2.imread("Lenna.png", 0)
plt.imshow(img_orig, cmap="gray");

Исходное изображение

f = np.fft.fft2(img_orig)
mag_orig, ang_orig = np.abs(f), np.arctan2(f.imag, f.real)
np.random.seed(42)
ns = np.random.uniform(0, 6.28, size = f.shape)
ang_noise = ang_orig+ns
img_noise = np.abs(np.fft.ifft2(mag_orig*np.exp(ang_noise*1j)))
plt.imshow(img_noise, cmap="gray");

Зашумленное изображение

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

f_noise = np.fft.fft2(img_noise)
mag_noise, ang_noise = np.abs(f_noise), np.arctan2(f_noise.imag, f_noise.real)
ang_recover = ang_noise-ns
img_recover = np.abs(np.fft.ifft2(mag_noise*np.exp(ang_recover*1j)))
plt.imshow(img_recover, cmap="gray");

Реконструированное изображение

Любая идея о том, почему это происходит и как это удалить? Я буду признателен за любую помощь, которую я могу получить. Благодарю вас


Ответы:


1

Добавьте в свой код после строки

ns = np.random.uniform(0, 6.28, size = f.shape)

это делает симметричную фазу:

ns = np.fft.fft2(ns)
ns = np.arctan2(ns.imag, ns.real)
15.06.2020

2

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

Короче говоря, я думаю, вам нужно удалить abs в этой строке:

img_noise = np.abs(np.fft.ifft2(mag_orig*np.exp(ang_noise*1j)))
14.06.2020
  • Если я уберу это, я получу сложный ndarray, который нельзя будет построить или сохранить как изображение. Неужели нет выхода? 15.06.2020
  • Вы хотите построить абсолютное значение, но не должны отбрасывать фазовые данные. Может быть, вы могли бы переместить np.abs внутрь команды plot, чтобы img_noise не менялось? 15.06.2020
  • Эта вещь на самом деле является частью более крупного проекта, которым я занимаюсь, где мне нужно передать это зашумленное изображение в CNN, а также реконструировать его. Так что я не могу сделать это со сложным массивом 15.06.2020
  • @ShreyDixit: если вам нужно, чтобы ваше обратное преобразование было действительным, то фаза, которую вы добавляете в частотную область, должна быть сопряженно-симметричной. Пока вы сохраняете эту симметрию в частотной области, ваше изображение в пространственной области останется действительным. Но у него все еще могут быть отрицательные значения, не используйте abs, возьмите реальную часть. 15.06.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..