图像处理基础知识

图像的基础知识

1、将lenna彩色图像转化为灰度图,利用傅里叶变换,将其变换到频域(考虑如何将图像的频谱图中心从四个拐角移动到中心),理解变换之后的输出的实部和虚部分别代表什么含义,如何获得图像的相位谱图,和相位角,对图像进行傅里叶逆变换,取其实部得到复原图,对比复原图和原图。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img_lenna = cv2.imread('Lenna_RGB.tif', 0) #自动读取为灰度图
#傅里叶变换
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)             # 傅里叶变换库函数调用
dftshift = np.fft.fftshift(dft)                                          # 将傅里叶频域从左上角移动到中间
res1 = 20 * np.log(cv2.magnitude(dftshift[:, :, 0], dftshift[:, :, 1]))  # 双通道结果转换为0到255的范围用于图像显示
#傅里叶变换
f = np.fft.fft2(img_lenna)
fshift = np.fft.fftshift(f)  #将傅里叶频域从左上角移动到中间
c1=np.log(np.abs(f)) #频域后图像的振幅信息(相位谱图)
c2 = np.log(np.abs(fshift))  #中心化操作
s1 = np.abs(fshift)  # 取振幅
s1_angle = np.angle(fshift)  # 取相位(相位角)
s1_real = s1*np.cos(s1_angle)  # 取实部
s1_imag = s1*np.sin(s1_angle)  # 取虚部
#傅里叶逆变换
ishift = np.fft.ifftshift(fshift)                                      # 将频域从中间移动到左上角
iimg = cv2.idft(ishift)                                                  # 傅里叶逆变换库函数调用
res2 = cv2.magnitude(iimg[:, :, 0], iimg[:, :, 1])                       # 双通道结果转换为0到255的范围
plt.rcParams['font.sans-serif'] = ['SimHei']                             # 显示中文
#显示图像
plt.subplot(131), plt.imshow(img_lenna, 'gray'), plt.title('img_lenna')
plt.subplot(132), plt.imshow(c1, 'gray'), plt.title('c1')  # 相位谱图
plt.subplot(133), plt.imshow(c2, 'gray'), plt.title('c2')  # 中心化操作
plt.show()

在这里插入图片描述

2.将lenna彩色图像转化为灰度图,进行余弦变换,由于余弦变换的能量主要集中与频率在0的位置,即频谱图的左上角,在左上角取不同频率范围的幅度值进行余弦逆变换,观察不同取值下,逆变换之后的复原图有什么不同。取值分别为(60,80,120),将原图及取不同取值范围时的三幅图利用matplotlib画在一个figure中

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
img_lenna = cv2.imread('Lenna_RGB.tif', 0) #自动读取为灰度图
img1 = img_lenna.astype(np.float32)
img_dct = cv2.dct(img1)
def imag_dct(img_dct , dig):
    img_dct1 = cv2.copyTo(img_dct, None)
    (rows, cols) = img_dct1.shape
    for i in range(0, rows):
        for j in range(0, cols):
            if i > dig or j > dig:
                img_dct1[i, j] = 0
    img_dct_log = np.log(abs(img_dct1))
    img_idct = cv2.idct(img_dct1)
    return img_dct_log, img_idct
img1_dct , img1_idct = imag_dct(img_dct , 60)
img2_dct , img2_idct = imag_dct(img_dct , 80)
img3_dct , img3_idct = imag_dct(img_dct , 120)
plt.subplot(421)
plt.imshow(img1_dct, cmap='gray')
plt.title('dct-60')
plt.axis('off')
plt.subplot(422)
plt.imshow(img1_idct, cmap='gray')
plt.title('idct-60')
plt.axis('off')
plt.subplot(423)
plt.imshow(img2_dct, cmap='gray')
plt.title('dct-80')
plt.axis('off')
plt.subplot(424)
plt.imshow(img2_idct, cmap='gray')
plt.title('idct-80')
plt.axis('off')
plt.subplot(425)
plt.imshow(img3_dct, cmap='gray')
plt.title('dct-120')
plt.axis('off')
plt.subplot(426)
plt.imshow(img3_idct, cmap='gray')
plt.title('idct-120')
plt.axis('off')
plt.subplot(427)
plt.imshow(img_lenna, cmap='gray')
plt.title('原图')
plt.axis('off')
plt.show()

在这里插入图片描述

3.将lenna彩色图像转化为灰度图,进行一层小波变换,首先理解小波的尺度a和平移量b对小波的幅值及位置的影响,理解小波基的正交性,将图像进行一层小波分解后得到4个量,分别为近似量(低频部分,比较模糊),水平细节(高频),垂直细节(高频),和对角线细节,这四个量利用matplotlib画在一个figure中。

import numpy as np
import pywt
import cv2
import matplotlib.pyplot as plt
img_lenna = cv2.imread('Lenna_RGB.tif', 0) #自动读取为灰度图
img=cv2.resize(img, (448,448))
img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float32)
plt.figure('二维小波一级变换')
coeffs=pywt.dwt2(img, 'haar')
cA,(cH,cV,cD)=coeffs
plt.subplot(221), plt.imshow(cA, 'gray'), plt.title("A")
plt.subplot(222), plt.imshow(cH, 'gray'), plt.title("H")
plt.subplot(223), plt.imshow(cV, 'gray'), plt.title("V")
plt.subplot(224), plt.imshow(cD, 'gray'), plt.title("D")
plt.show()
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三毛是she

感谢打赏,我会继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值