当前位置:   article > 正文

图像频谱图-直方图三维可视化 python_3d直方图 python

3d直方图 python

                                             图像频谱图-直方图三维可视化 python代码

目录

1.条纹噪声图像-频谱图3D可视化

2. 图像二维直方图3D可视化


1.条纹噪声图像-频谱图3D可视化

#频谱图三维可视化思路:将图像经过傅里叶变换,中心化,取log,再3D可视化

代码

  1. import cv2
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from mpl_toolkits.mplot3d import Axes3D
  5. def fft_plot3d(img_bgr):
  6. img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
  7. fft = np.fft.fft2(img_gray)
  8. fft_shift = np.fft.fftshift(fft)
  9. abs_fft = np.abs(fft_shift)
  10. '''必须取log,因为最大值包含着太大的能量了,导致直接归一化,其它数值为0'''
  11. abs_fft = np.log(1 + abs_fft)
  12. fft_aug_norm = cv2.normalize(abs_fft, 0, 255, norm_type=cv2.NORM_MINMAX).astype(np.uint8)
  13. h,w = img_gray.shape
  14. # 3D可视化,需要3维坐标,np.meshgrid将重复的复制简单化
  15. c = np.meshgrid(np.arange(0,w), np.arange(0,h))
  16. fig = plt.figure()
  17. ax1 = Axes3D(fig)
  18. print(c[0].shape,c[1].shape)
  19. ax1.plot_surface(c[0], c[1], fft_aug_norm, cmap='rainbow') # 这种颜色比较好一点
  20. ax1.set_xlabel('X')
  21. ax1.set_ylabel('Y')
  22. ax1.set_zlabel('Z')
  23. plt.show()
  24. return
  25. if __name__=="__main__":
  26. img_path = r"F:\DataSets\Security_VQD\color_cast\IMG_20200513_103921.jpg"
  27. img_bgr = cv2.imread(img_path, -1)
  28.   fft_plot3d(img_bgr)

3D频谱图可视化:(右条纹噪声图,左为其频谱图3D可视化)

   

#####################################################################################

2. 图像二维直方图3D可视化

# 图像二维直方图3D可视化

  1. def hist2d_plot3d(img_bgr):
  2. img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB) # -128->128
  3. img_lab = np.float64(img_lab)-128
  4. hist, xbins, ybins = np.histogram2d(img_lab[...,1].flatten(), img_lab[...,2].flatten(), bins=[256,256], range=[[-128,128], [-128,128]])
  5. hist = np.log(1+hist)
  6. hist = cv2.normalize(hist, 0, 255, norm_type=cv2.NORM_MINMAX).astype(np.uint8)
  7. print(hist.max(), hist.min())
  8. print(hist.shape)
  9. print(len(xbins), len(ybins))
  10. # 开始绘制3D直方图
  11. fig = plt.figure()
  12. # ax1 = Axes3D(fig)
  13. ax1 = fig.add_subplot(1, 1, 1, projection='3d')
  14. c = np.meshgrid(np.arange(-128,128), np.arange(-128,128))
  15. ax1.plot_surface(c[0], c[1], hist, cmap='rainbow')
  16. ax1.set_xlabel('a')
  17. ax1.set_ylabel('b')
  18. plt.show()
  19. return
  20. if __name__=="__main__":
  21. img_path = r"F:\DataSets\Security_VQD\color_cast\IMG_20200513_103921.jpg"
  22. img_bgr = cv2.imread(img_path, -1)
  23. hist2d_plot3d(img_bgr)
3D直方图可视化

  

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/967886
推荐阅读
相关标签
  

闽ICP备14008679号