電機基礎實作實習

若想要在家中電腦執行以下程式,請前往 https://store.continuum.io/cshop/anaconda/ 下載Anaconda Python 軟體

實驗開始步驟:

(1)前往 https://github.com/htygithub/SS_EXP 點選右下角按鈕 "Download Zip"

(2)將 Zip 檔解壓縮至"我的文件"

(3)按下開始工具列->附屬應用程式->命令提示字元 來開啟命令列視窗

(4)於命令列鍵入 ipython notebook 指令來開啟 Jupyter 視窗

(5)開啟Lesson_0_Scipy_intro.ipynb 開始以下實驗作答

實驗一: Numpy , Matplotlib 初見面

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

In [ ]:
#coding: utf-8
%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
%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
%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
%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色彩

用滑鼠點選以下程式碼,並按下"Play"鈕執行看看結果

In [2]:
#coding: utf-8
%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');
(512L, 512L, 3L)

問題六

(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%)


實驗七 介面範例:

玩玩看以下範例,並回答以下問題

In [ ]:
#coding: utf-8
%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)

問題:上網搜尋 scipy.misc.imrotate 的使用方法,將上述介面增加一項新的滑桿。 用這個滑桿可以調整Lena影像的旋轉角度。