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

Почему прохождение изображения через фильтр нижних частот дает значения выше, чем у исходного изображения?

У меня есть гибридное изображение, созданное путем наложения низких частот одного изображения на высокие частоты другого. Я пытаюсь разделить (де-гибридизировать) это изображение, пропуская его через фильтр нижних частот для извлечения низких частот (одно из двух изображений), а затем вычитая их из исходного изображения, чтобы получить другое изображение (высокие частоты). частоты).

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

Кто-нибудь знает, почему мой фильтр нижних частот дает более высокие значения частоты, чем исходное изображение?

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from numpy.fft import fft2, ifft2, fftshift, ifftshift

# Make Gaussian filter
def makeGaussianFilter(numRows, numCols, sigma, highPass=True):
   centerI = int(numRows/2) + 1 if numRows % 2 == 1 else int(numRows/2)
   centerJ = int(numCols/2) + 1 if numCols % 2 == 1 else int(numCols/2)

   def gaussian(i,j):
      coefficient = np.exp(-1.0 * ((i - centerI)**2 + (j - centerJ)**2) / (2 * sigma**2))
      return 1 - coefficient if highPass else coefficient

   return np.array([[gaussian(i,j) for j in range(numCols)] for i in range(numRows)])

# Filter discrete Fourier transform
def filterDFT(imageMatrix, filterMatrix):
   shiftedDFT = fftshift(fft2(imageMatrix))
   filteredDFT = shiftedDFT * filterMatrix
   return ifft2(ifftshift(filteredDFT))

# Low-pass filter
def lowPass(imageMatrix, sigma):
   n,m = imageMatrix.shape
   return filterDFT(imageMatrix, makeGaussianFilter(n, m, sigma, highPass=False))

# Read in einsteinandwho.png and convert to format that can be displayed by plt.imshow
im3 = mpimg.imread('einsteinandwho.png')
rows = im3.shape[0]
cols = im3.shape[1]
img3 = np.ones((rows, cols, 4))
for i in range(rows):
    for j in range(cols):
        img3[i][j][0:3] = im3[i][j]
        img3[j][j][3] = 1

# Extract low frequencies and convert to format that can be displayed by plt.imshow
lowPassed = np.real(lowPass(im3, 10))
low = np.ones((rows, cols, 4))

for i in range(rows):
    for j in range(cols):
        low[i][j][0:3] = lowPassed[i][j]
        low[j][j][3] = 1

# Remove low frequencies from image
output = img3[:,:,0:3] - low[:,:,0:3]

  • Вам не нужно создавать версию изображения RGBA для отображения с помощью plt.imshow. На самом деле проще отображать изображение в градациях серого напрямую. 20.03.2020

Ответы:


1

Кто-нибудь знает, почему мой фильтр нижних частот дает более высокие значения частоты, чем исходное изображение?

Обратите внимание на разницу между значениями пикселей и значениями частоты. Вы видите, что значения пикселей выше, а не значения частоты!


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

20.03.2020
Новые материалы

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

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

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

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

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

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

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