攝影設(shè)計網(wǎng)站百度知道官網(wǎng)登錄入口
前言
選修的是蔡mj老師的計算機(jī)視覺,上課還是不錯的,但是OpenCV可能需要自己學(xué)才能完整把作業(yè)寫出來。由于沒有認(rèn)真學(xué),這門課最后混了80多分,所以下面作業(yè)解題過程均為自己寫的,并不是標(biāo)準(zhǔn)答案,僅供參考
任務(wù)1
修改test.py的task_one()函數(shù),對task1.jpg進(jìn)行去噪處理,處理結(jié)果保存為task1_proc.jpg
提示:請觀察分析task1.jpg的噪聲特點(diǎn),并選擇合適的處理方法
def task_one():img = cv2.imread('task1.jpg')#---------your code-----------------#median = cv2.medianBlur(img, 3)#---------draw figures--------------#plt.imshow(cv2.cvtColor(median, cv2.COLOR_BGR2RGB)),plt.title('task1 output')plt.show()#---------save figures--------------#cv2.imwrite("task1_proc.jpg", median)
效果如下:
任務(wù)2
修改test.py的task_two()函數(shù),對task2.jpg進(jìn)行去噪處理,處理結(jié)果保存為task2_proc.jpg
提示:請觀察分析task2.jpg的噪聲特點(diǎn),并選擇合適的處理方法
def task_two():img = cv2.imread('task2.jpg')#---------your code-----------------#blur = cv2.bilateralFilter(img,5,50,50)#---------draw figures--------------##plt.imshow(cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)),plt.title('task2 output')#plt.show()#---------save figures--------------#cv2.imwrite("task2_proc.jpg", blur)
效果如下:
任務(wù)3
修改test.py的task_three()函數(shù),對task3.jpg進(jìn)行去噪處理,處理結(jié)果保存為task3_proc.jpg
提示:task3.jpg中的噪聲為y軸方向的周期噪聲,周期為圖像高度(height)的1/10
這個不會做,弄了半天
def task_three():#img = cv2.imread('task3.jpg',1)#---------your code-----------------## 讀取圖像img = cv2.imread('task3.jpg')# 分離RGB通道b, g, r = cv2.split(img)# 對每個通道進(jìn)行傅里葉變換fb = np.fft.fft2(b)fg = np.fft.fft2(g)fr = np.fft.fft2(r)# 將頻域中的原點(diǎn)移動到圖像中心fb_shift = np.fft.fftshift(fb)fg_shift = np.fft.fftshift(fg)fr_shift = np.fft.fftshift(fr)# 獲取頻譜圖像magnitude_spectrum_b = 20 * np.log(np.abs(fb_shift))magnitude_spectrum_g = 20 * np.log(np.abs(fg_shift))magnitude_spectrum_r = 20 * np.log(np.abs(fr_shift))# 獲取圖像高度height, width = img.shape[:2]# 計算周期噪聲的頻率成分dft_height = np.ceil(height / 10)cy = np.arange(dft_height, height, dft_height)cx = np.arange(width)# 將周期噪聲的頻率成分設(shè)置為0for y in cy:fb_shift[int(y) - 1:int(y) + 1, :] = 0fg_shift[int(y) - 1:int(y) + 1, :] = 0fr_shift[int(y) - 1:int(y) + 1, :] = 0# 進(jìn)行反傅里葉變換,得到去噪后的圖像ib = np.fft.ifft2(np.fft.ifftshift(fb_shift))ig = np.fft.ifft2(np.fft.ifftshift(fg_shift))ir = np.fft.ifft2(np.fft.ifftshift(fr_shift))# 將每個通道的結(jié)果合并為一張去噪后的彩色圖像denoised_img = cv2.merge((ib.real, ig.real, ir.real))#---------draw figures--------------##plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB)),plt.title('task3 output')#plt.show()#---------save figures--------------#cv2.imwrite("task3_proc.jpg", denoised_img)
效果和原圖沒啥區(qū)別。。。
源代碼:
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 31 14:51:59 2023@author: cai-mj
"""import numpy as np
import cv2
from matplotlib import pyplot as pltdef task_one():img = cv2.imread('task1.jpg')#---------your code-----------------#median = cv2.medianBlur(img, 3)#---------draw figures--------------#plt.imshow(cv2.cvtColor(median, cv2.COLOR_BGR2RGB)),plt.title('task1 output')plt.show()#---------save figures--------------#cv2.imwrite("task1_proc.jpg", median)def task_two():img = cv2.imread('task2.jpg')#---------your code-----------------#blur = cv2.bilateralFilter(img,5,50,50)#---------draw figures--------------##plt.imshow(cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)),plt.title('task2 output')#plt.show()#---------save figures--------------#cv2.imwrite("task2_proc.jpg", blur)def task_three():#img = cv2.imread('task3.jpg',1)#---------your code-----------------## 讀取圖像img = cv2.imread('task3.jpg')# 分離RGB通道b, g, r = cv2.split(img)# 對每個通道進(jìn)行傅里葉變換fb = np.fft.fft2(b)fg = np.fft.fft2(g)fr = np.fft.fft2(r)# 將頻域中的原點(diǎn)移動到圖像中心fb_shift = np.fft.fftshift(fb)fg_shift = np.fft.fftshift(fg)fr_shift = np.fft.fftshift(fr)# 獲取頻譜圖像magnitude_spectrum_b = 20 * np.log(np.abs(fb_shift))magnitude_spectrum_g = 20 * np.log(np.abs(fg_shift))magnitude_spectrum_r = 20 * np.log(np.abs(fr_shift))# 獲取圖像高度height, width = img.shape[:2]# 計算周期噪聲的頻率成分dft_height = np.ceil(height / 10)cy = np.arange(dft_height, height, dft_height)cx = np.arange(width)# 將周期噪聲的頻率成分設(shè)置為0for y in cy:fb_shift[int(y) - 1:int(y) + 1, :] = 0fg_shift[int(y) - 1:int(y) + 1, :] = 0fr_shift[int(y) - 1:int(y) + 1, :] = 0# 進(jìn)行反傅里葉變換,得到去噪后的圖像ib = np.fft.ifft2(np.fft.ifftshift(fb_shift))ig = np.fft.ifft2(np.fft.ifftshift(fg_shift))ir = np.fft.ifft2(np.fft.ifftshift(fr_shift))# 將每個通道的結(jié)果合并為一張去噪后的彩色圖像denoised_img = cv2.merge((ib.real, ig.real, ir.real))#---------draw figures--------------##plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB)),plt.title('task3 output')#plt.show()#---------save figures--------------#cv2.imwrite("task3_proc.jpg", denoised_img)if __name__ == '__main__':task_one()task_two()task_three()