#!/usr/bin/env python # coding: utf-8 # #數位邏輯與應用實習 (3/3) # # 有任何問題隨時舉手發問,助教及老師會協助你解決。 # # 若想要在家中電腦執行以下程式,請前往 https://store.continuum.io/cshop/anaconda/ 下載Anaconda Python 軟體 # # 實驗開始步驟: # # (1)點右上角按鈕下載此份文件"ipython notebook" # # (2)將 EECS_exp3.ipynb 存放至"我的文件" # # (3)按下開始工具列->附屬應用程式->命令提示字元 來開啟命令列視窗 # # (4)於命令列鍵入 ipython notebook 指令來開啟 Jupyter 視窗 # # (5)開啟EECS_exp3.ipynb 開始以下實驗作答 # # ##實驗一: Python 程式語言初見面 # # 用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果
# In[ ]: #coding: utf-8 get_ipython().run_line_magic('matplotlib', 'inline') import numpy as np import matplotlib.pyplot as plt x=np.array([0,0,0,0,1,1,1,1,0,0,0,0]) plt.plot(x,'ro-') # ##問題一 # (1)按加號新增一個"Markdown"區塊,描述你看到了什麼。
# (2)再按加號新增一個"code"區塊,嘗試畫出 "三個帽子"的波形
# (按加號後,點選 'Cell Toolbar' 左方是下拉式選單,選擇 CODE) # **************************************************************************************** # ##實驗二: Python 之資料顯示以及np 陣列 # 用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果
# In[ ]: #coding: utf-8 import numpy as np t=np.arange(0,1,0.1) print t print "這是 np.arange(0,1,0.1)的結果:" + str(t) print "加上一些換行字元\n\n\n" + "換行的結果是這樣\n" t=np.arange(0,1,0.01) print "這是 np.arange(0,1,0.01)的結果:" print t sumt=sum(np.arange(0,10,1)) print "\n\n\n這是 sum(np.arange(0,10,1))的結果:" +str(sumt) # ##問題二 # 新增一個"Markdown"區塊,將以下問題之答案寫下來。
# (1)請推論 np.arange 這個函數的用處,以及三個輸入值的意義。
# (2)新增一個"code"區塊,利用python 程式碼,計算100以下偶數之總合。 # **************************************************************************************** # # ##實驗三 : 弦波的頻率以及繪圖 # 用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果
# In[ ]: #coding: utf-8 get_ipython().run_line_magic('matplotlib', 'inline') import numpy as np import matplotlib.pyplot as plt t=np.arange(0,1,0.01) pi=np.pi curve=np.sin(2*pi*10*t) curve2=np.sin(2*pi*5*t) plt.plot(t,curve,'b',t,curve2,'r') # ##問題三 # # (1)假設橫軸時間單位為秒,請問curve及curve2各為幾Hz弦波(也就是在一秒內走了幾個週期)?
# (新增一個"Markdown"區塊,回答此問題)

# (2)又我們如何改變指令,畫出一個 3 Hz的Cosine波呢?
# (新增一個"CODE"區塊,回答此問題) # **************************************************************************************** # ##實驗四 : 影像以及RGB色彩 # 用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果
# In[ ]: #coding: utf-8 get_ipython().run_line_magic('matplotlib', 'inline') import numpy as np import matplotlib.pyplot as plt x=np.array([0,0,0,1,1,1,1,0,0,0]) y=np.array([x,x,x,x,x,x,x,x,x,x]) print y print y.shape plt.figure(1) plt.imshow(y,cmap='gray',interpolation='nearest') y=np.array([x/5.,x/4.,x/3.,x/2.,x/1.,x,x,x,x,x]) plt.figure(2) plt.imshow(y,cmap='gray',interpolation='nearest') # ##問題四 # (1)請問y 矩陣的大小為何?
# (2)試完成一個10x10的矩陣,顯示一個白色十字。 # (新增一個"CODE"區塊,回答此問題) # **************************************************************************************** # ##實驗五 :RGB色彩 # 用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果
# In[ ]: #coding: utf-8 get_ipython().run_line_magic('matplotlib', 'inline') import numpy as np import matplotlib.pyplot as plt x=np.array([0,0,0,1,1,1,1,0,0,0]) y=np.array([x,x,x,x,x,x,x,x,x,x]) z=np.zeros([10,10,3]) z[:,:,0]=y plt.figure(figsize=[15,5]) plt.subplot(1,4,1) plt.imshow(z,interpolation='nearest') ####################################### z=np.zeros([10,10,3]) z[:,:,1]=y plt.subplot(1,4,2) plt.imshow(z,interpolation='nearest') ####################################### z=np.zeros([10,10,3]) z[:,:,2]=y plt.subplot(1,4,3) plt.imshow(z,interpolation='nearest') ####################################### z=np.zeros([10,10,3]) z[:,:,0]=y z[:,:,1]=y plt.subplot(1,4,4) plt.imshow(z,interpolation='nearest') # ##問題五 # 以上範例是將紅光、綠光、藍光分別開至最大亮度 (數值1)
# 若是將紅、綠、藍分別以1, 0.5, 0 來表示, 試著新增一組程式碼完成配色,並說明合成的顏色為? # # **************************************************************************************** # ##實驗六 :照片中的RGB色彩 # (1)前往 http://mri.ee.ntust.edu.tw ->course --> 電機基礎實作測試資料 下載924-lena.zip # # (2)將zip解壓後存放至 EECS_exp3.ipynb之相同目錄 # # (3)用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果
# # In[ ]: #coding: utf-8 get_ipython().run_line_magic('matplotlib', 'inline') import numpy as np import matplotlib.pyplot as plt import scipy.misc as misc lena_img=misc.imread('lena_std.jpg'); print lena_img.shape plt.figure(figsize=[15,5]) plt.subplot(1,4,1) plt.imshow(lena_img) plt.title('Original') plt.subplot(1,4,2) plt.imshow(lena_img[:,:,2],cmap='gray') plt.title('Fig. 1'); plt.subplot(1,4,3) plt.imshow(lena_img[:,:,1],cmap='gray') plt.title('Fig. 2'); plt.subplot(1,4,4) plt.imshow(lena_img[:,:,0],cmap='gray') plt.title('Fig. 3'); # ##問題六 # (1)Fig.1 , 2, 3 代表Lena 圖其中的三原色,若紅光影像數值愈高者(愈白愈亮),代表該像素的中的紅光成份愈高。
# 請用肉眼觀察以及程式碼的觀察,來說明Fig. 1, 2,3 各代表 R、G、B 中的那一原色。
# (2)新增一個code 區塊,將Lena影像中的紅色影像減少20%。
# (hint: lena_img[:,:,X]=lena_img[:,:,X]*0.9, 就代表將X色光通道減弱 10%) # # **************************************************************************************** # ##介面範例: # 恭喜你,做到這步實驗課就結束囉。通知助教來檢查。最後這個範例你可以執行看看,用滑鼠調整RGB值,來觀察影像。 # # # In[ ]: #coding: utf-8 get_ipython().run_line_magic('matplotlib', 'inline') import numpy as np import scipy.misc as misc import matplotlib.pyplot as plt from IPython.html.widgets import interact, interactive, fixed from IPython.display import display lena_img=misc.imread('lena_std.jpg') lims = (0.1,1.0,0.1) def edit_image( r=1.0, g=1.0, b=1.0): lena_img2=lena_img*0 lena_img2[:,:,0] = r*lena_img[:,:,0] lena_img2[:,:,1] = g*lena_img[:,:,1] lena_img2[:,:,2] = b*lena_img[:,:,2] plt.imshow(lena_img2) #return lena_img2 w = interactive(edit_image, r=lims, g=lims, b=lims) display(w)