一、作業題目
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中 圍棋個數2022年6月1日 星期三
s1083304作業6
1. 作業說明
附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
2.開發環境
Windows 10
Visual Studio Code 1.64
OpenCV 455
3. 實作方法
encode.py:
1. 讀入圖片後,用split()分離BGR通道,並使用flatten()將各通道一維化。
2. 自訂一個 RLEencode() 對各通道做壓縮,頭兩個資料存原圖長寬h,w,主要格式為(重複出現次數,數值),ex:[ 0 0 0 0 0 1 1 4 4 4 ] -> [ 5 0 2 1 3 4 ] ,各通道用 'b' , 'g' , 'r' 分離辨別。
3.最後計算出 compress ratio 和 average compress ratio
decode.py:
1.open txt and read
2.照重複出現次數和數值復原BGR。
3.分別把BGR list 照原圖h,w reshape(),用 astype() 設定為 uint8
4.將三通道 merge() 起來,得到原圖。
4. 執行結果
壓縮檔格式
頭
尾
compression ratio
2022年5月17日 星期二
s1083304 作業5
1. 作業說明
撰寫一個程式將所附圖像flower.jpg的黃色花瓣區域擷顯示出來
2. 開發環境
Window 10
Visual Studio Code 1.64
OpenCV 4.5.5
3.實作方法
1.用imread()讀取圖片
2.用cvtColor將原圖轉為hsv
3.設定yellow的 upper 和 lower
4.生成一個 mask 遮罩(原圖黃色部分為白色,其餘部分為黑色)
5.用 bitwise_and() 把原圖和遮罩合併並輸出
4.執行結果
原圖
hsv
mask
結果圖
2022年4月13日 星期三
s1083304 作業4
1. 作業說明
請撰寫一個程式,讀取一張256色灰階圖像。
(1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。
(2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。
2. 開發環境
Windows 10
Visual Studio Code 1.64
OpenCV 4.5.5.
3. 實作方法
(1)
1. cv2.IMREAD_GRAYSCALE 讀入灰階圖片
2. 用 getOptimalDFTSize() 還有 copyMakeBorder() ,存下實部和虛部,最後用 merge() 合併通道
3. dft()進行傅立葉轉換
4. split() 分離通道,以 magnitude() 取得頻譜,phase() 取得相位角,將複數轉為幅值
5. log() 對圖片做對數縮放
6. 對圖片幅度分布圖做中心化,最後normalized()控制值於 0,1 之間並輸出
(2)
1. cv2.IMREAD_GRAYSCALE 讀入灰階圖片
2. 建立一個 5*5 高斯低通卷積核矩陣 kernel,中心點權重偏重,水平垂直方向呈高斯分布,如下:
3. 自定義函數,先對圖片做邊緣擴充 kernel 大小
4. for loop 對圖片各個點做卷積,原圖各點圖像乘上 kernel 對應數並相加,最後將圖片截為原圖尺寸並回傳
5. 最後以 pyplot.imshow 以 cmap='gray' 輸出,對比原圖
4. 執行結果
Spectrum Magnitude
Phase
Guassian Low Pass
對比圖
原圖 Gaussian Low pass
2022年3月18日 星期五
s1083304 作業3
1. 作業說明
撰寫一個程式, 以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)
(a)利用 Sobel Operators 偵測並輸出邊緣成分圖
(b)設計一個類似素描線條的自畫像圖案。 (想想:如何使用邊緣偵測所得到的點,結合
成看似素描筆畫出的線條?)
2. 開發環境
Windows 10
Visual Studio Code Ver 1.64
OpenCV 4.5.5
3. 實作方法
(a)
1. 利用 imread 以 IMREAD_GRAYSCALE 方式讀取圖片
2. 用 Sobel 和 convertScaleAbs 函數對x, y邊緣檢測
3. 使用addweighted將兩張邊緣檢測處理完的圖片合併
(b)
1. 利用 imread 以 IMREAD_GRAYSCALE 方式讀取圖片
2. 用 GaussianBlur 對讀入圖片做模糊處理
3. 用 Sobel 和 convertScaleAbs 函數對x, y邊緣檢測
4. 使用addweighted將兩張邊緣檢測處理完的圖片合併
5. 將圖片作色彩反轉
6. 對圖片做 threshold() 二值化
4. 執行結果
2022年3月7日 星期一
s1083304 作業2
1. 作業說明
寫一個程式將一張圖像的(a)整張圖像, (b)中心內切圓區域, 旋轉一個角度(逆時針旋轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。
2. 開發環境
Windows 10
Visual Studio Code Ver 1.64
OpenCV 4.5.5
3. 實作方法
旋轉整張圖片:
使用createTrackBar搭配getRotationMatrix2D和warpAffine完成
僅旋轉內切圓部分圖片:
1.以原圖尺寸生成兩張RGB圖片,分別為內切圓部分像素值設定為白色(255,255,255),其餘設定為黑色(0);以及內切圓部分像素值設定為黑色(0),其餘設定為白色(255,255,255)
2.使用createTrackBar搭配getRotationMatrix2D和warpAffine旋轉圓圖並與圖片1使用cv2.bitwise_and()合併取得內切圓旋轉的部分。
3.將原圖與圖片2使用cv2.bitwise_and()合併取的外圍不變的部分
4.使用cv2.add()將兩張合併過的圖片相加,輸出結果圖片。
4.執行結果
整張圖片旋轉 45 度
2022年2月24日 星期四
s1083304作業1
2022年2月24日 星期四
s1083304 作業1
- Window10
- Microsoft Visual Studio Code Ver 1.64
- OpenCv 4.5.5












