2022年4月14日 星期四

s1073513 作業 4

1.作業說明:

 

請撰寫一個程式,讀取一張256色灰階圖像。

 

(1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

 

(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

 

(程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。)

2. 開發環境:

Windows 10

OpenCV 4.5.5

Python 3.7

3. 實作方法:

(1)

        先利用imread將照片輸入

 

        cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)函式進行傅立葉轉換

 

        np.fft.fftshift(dft)將输出的零頻率分量移到中心

 

        extract magnitude and phase images : cv2.cartToPolar(dft_shift[:,:,0], dft_shift[:,:,1])

        get spectrum : np.log(mag) /20

(2)

        參考PIL原始檔的ImageFilter.py

        高斯的計算公式: res1=1/(2*math.pi*self.sigema*self.sigema)

                            res2=math.exp(-(x*x+y*y)/(2*self.sigema*self.sigema))

4.結果:

• (1)


        


        


         (2)






s1081526 作業4

 1.開發環境:

opencv:4.5.5

windows10

visual studio 2019,c++


2.作業說明:

(1)計算輸入圖的離散傅立葉轉換(DFT)結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

在函式dft2中主要是在做:

1.使用getOptimalDFTSize()和copyMakeBorder()將圖像擴充成適合DFT的尺寸。

2.用merge將plane中存放的實部與虛部合併成一個多通道數組。

3.用dft()做離散傅立葉之後將結果回傳。

回到主程式:

4.將從dft2()得到的回傳結果用split()分開實部和虛部。

5.用magnitude()計算,然後進行對數變換

6.用logArray()將spectrum剪裁為偶數行與偶數列

7.重新排列spectrum的區域,使原點在圖像中心。

8.用normalize歸一化。

這樣就得到頻譜圖了。

相位圖的處理寫在plotPhase()函式裡。

一樣是先用dft2得到mergeArray,用split()分開實部和虛部,然後遍歷做arc tan(虛部/實部),將圖片重新排列成四個象限,最後也用normalize歸一化。

  (2)對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

使用了GaussianBlur()。




s1071516作業4

  一、作業說明

請撰寫一個程式,讀取一張256色灰階圖像。

(1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

(程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。)

二、開發環境

Windows11

Visual Studio 2019

OpenCV4.5.5

三、實作方法

頻譜圖、相位角:

1. 輸入圖片路徑,並以灰階格式讀取圖片。

2. 將圖片進行零填充,利用copyMakerBroder()函數實現零填充。

3. 使用dft()進行離散傅立葉轉換。

4.用split將傅立葉轉換結果的實部和虛部分開

4以phase()及magnitude()分別取得相位角度及頻譜。

5. 利用normalize把值控制在0-1之間。

高斯濾波:

1.生成一維的高斯濾波模板

2. 歸一化

3.將模板應用到影像中

4.分別處理水平方向和垂直方向

四、執行結果









s1083334 作業 4

 - 作業說明

讀取一張256色灰階圖像,

1. 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

2. 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。



 - 開發環境

Windows 10

Visual Studio 2017

OpenCV - 4.5.0


- 實作方式

以灰階方式讀入原圖dft()傅立葉轉換,接著用split()分離實部和虛部 得到和圖片一樣大的複數矩再把圖片分成四個部分並重新組合,最後magnitude() 產生頻譜圖、phase() 產生相位圖、GaussianBlur()呈現平滑後圖片。


- 結果

原圖


頻譜圖


相位圖

平滑圖



 

作業說明

(1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

(程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。)

開發環境

  • Windows 10
  • Python 3.10.2
  • OpenCV 4.5.5
  • Numpy 1.22.2
  • Matplotlib 3.5.1

        

程式說明

    讀取圖片然後用getOptimalDFTSize,copyMakeBorder擴大到適合的大小,之後使用dft做傅立葉轉換,使用split把實部跟虛部分開再用magnitude跟phase轉出頻譜圖跟相位圖,
    做出高斯低通率波矩陣再用idft做出逆傅立葉轉換求出模糊後的圖

執行結果

    


s1081509 作業4

 

 作業說明:

       請撰寫一個程式,讀取一張256色灰階圖像。

(1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

(程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。)

環境:

Ubuntu-20.04

Vim 8.2

CMake 3.16.3

OpenCV  4.2.0

程式功能:

1.      imread()讀圖片

2.      用getOptimalDFTSize, copyMakeBorder展開圖片去DFT速度

3.      先設定好實數、虛數的空間,用merge製作multi-channel array

4 .    dft進行傅立葉轉換,用split分出planes

5.     magnitude, phase進行頻譜大小、相位角度

6.     對圖片進行調整位置 

7.     normalize至0-1間

8.      Imshow、imwrite展示、儲存圖片


GaussBlur

1. 用定義開雙層for迴圈製作kernel

2. 對圖做卷積運算

3. Imshow、imwrite展示、儲存圖片



使用指令:

make ; ./hw4 picture_name.jpg



s1083330 作業4

 作業說明:


請撰寫一個程式,讀取一張256色灰階圖像。


(1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。


(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。


 


使用環境/語言:


Windows10

Visual Studio 2017

Opencv-4.5.5

C++


 


執行/程式說明:


(1)


1.IMREAD_GRAYSCALE將圖片載入成黑白


2.用merge將plane給合併


3.利用dft()進行傅立葉轉換


4.利用split()將通道切割出


5.用magnitude()製作Spectrum magnitude圖


6.用phase()製作Phase圖


7.將圖片重新排列成四個象限


8.使用normalize把值控制在0-1之間


(2)

1.用GaussianBlur()