Я новичок во всем этом, я хотел бы получить спектр величины из изображения, а затем перестроить изображение из модифицированного спектра величины. Но сейчас я получаю очень темное восстановление.
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('IMG.jpg',0)
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
m, a = np.log(cv2.cartToPolar(dft_shift[:,:,0],dft_shift[:,:,1]))
# do somthing with m
x, y = cv2.polarToCart(np.exp(m), a)
back = cv2.merge([x, y])
f_ishift = np.fft.ifftshift(back)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(m, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(img_back, cmap = 'gray')
plt.title('result'), plt.xticks([]), plt.yticks([])
plt.show()
результат
Можете ли вы, ребята, помочь мне выяснить, почему это так темно.
Заранее спасибо:)
РЕДАКТИРОВАТЬ
Я попытался нормализовать изображение, но это не работает. У меня все еще очень темное изображение.
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('IMG.jpg',0)
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
m, a = np.log1p(cv2.cartToPolar(dft_shift[:,:,0],dft_shift[:,:,1]))
# modify m, then use the modify m to reconstruct
x, y = cv2.polarToCart(np.expm1(m), a)
back = cv2.merge([x, y])
f_ishift = np.fft.ifftshift(back)
img_back = cv2.idft(f_ishift, flags=cv2.DFT_SCALE)
img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
min, max = np.amin(img, (0,1)), np.amax(img, (0,1))
print(min,max)
# re-normalize to 8-bits
min, max = np.amin(img_back, (0,1)), np.amax(img_back, (0,1))
print(min,max)
img_back = cv2.normalize(img_back, None, alpha=0, beta=252, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
min, max = np.amin(img_back, (0,1)), np.amax(img_back, (0,1))
print(min,max)
plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(m, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(img_back, cmap = 'gray')
plt.title('result'), plt.xticks([]), plt.yticks([])
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
Вывод:
0 252
0.36347726 5867.449
0 252
Я хотел бы изменить спектр спектра и использовали модифицированную версию для восстановления изображения.