Я работаю над изображением и хочу удалить из него фон. Для этого я собираюсь использовать DFT, а затем вычесть разницу между моим изображением и фоном (+ шумные вещи).
Мне нужно понять, почему я получаю тот же результат, если я делаю следующие вещи:
import cv2
import numpy as np
from matplotlib import pyplot as plt
from scipy import signal
#### FFT SUBSTRACT
#Extract image
CellImg = cv2.imread(r'cell.jpg',0)
BackImg = cv2.imread(r'back.jpg',0)
#Covnert to 32 float
CellImg_float32 = np.float32(CellImg)
BackImg_float32 = np.float32(BackImg)
print("Size Cell: "+str(np.shape(CellImg_float32)))
print("Size Back: "+str(np.shape(BackImg_float32)))
# DFT
dft_CellImg_float32 = cv2.dft(CellImg_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift_CellImg_float32 = np.fft.fftshift(dft_CellImg_float32)
dft_BackImg_float32 = cv2.dft(BackImg_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift_BackImg_float32 = np.fft.fftshift(dft_BackImg_float32)
# Subtract and inverse: CELL - BACKGROUND
dft_diff_cmb = dft_shift_CellImg_float32 - dft_shift_BackImg_float32
SubFFTImg_inverse_cmb = cv2.idft(np.fft.ifftshift(dft_diff_cmb))
SubFFTImg_cmb = cv2.magnitude(SubFFTImg_inverse_cmb[:,:,0],SubFFTImg_inverse_cmb[:,:,1])
# Subtract and inverse: BACKGROUND - CELL
dft_diff_bmc = dft_shift_BackImg_float32 - dft_shift_CellImg_float32
SubFFTImg_inverse_bmc = cv2.idft(np.fft.ifftshift(dft_diff_bmc))
SubFFTImg_bmc = cv2.magnitude(SubFFTImg_inverse_bmc[:,:,0],SubFFTImg_inverse_bmc[:,:,1])
# Plot Init image -> (Image - Background) & (Background - Image)
plt.figure()
plt.subplot(231),plt.imshow(CellImg, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(232),plt.imshow(BackImg, cmap = 'gray')
plt.title('Background'), plt.xticks([]), plt.yticks([])
plt.subplot(233),plt.imshow(SubFFTImg_cmb, cmap = 'gray')
plt.title('Image - Background'), plt.xticks([]), plt.yticks([])
plt.subplot(234),plt.imshow(CellImg, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(235),plt.imshow(BackImg, cmap = 'gray')
plt.title('Background'), plt.xticks([]), plt.yticks([])
plt.subplot(236),plt.imshow(SubFFTImg_bmc, cmap = 'gray')
plt.title('Background - Image'), plt.xticks([]), plt.yticks([])
plt.show()
Результаты следующие:
Испытание № 1:
Тест № 2:
Что я спрашиваю здесь: почему я получаю тот же результат, если я вычитаю в один раз (изображение - назад) и во второй (назад - изображение)? Разве я не должен получить прямо противоположные результаты? Если нет, то чего мне не хватает?
Спасибо вам всем!
ps: да, изображения самые низкие Q, мне просто нужно понять, почему я получаю этот результат!