顯示具有 s1073318 標籤的文章。 顯示所有文章
顯示具有 s1073318 標籤的文章。 顯示所有文章

2022年6月6日 星期一

s1073318 作業7

一、 作業說明

請撰寫一個程式,利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數。

a.     請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。

b.     程式不一定可以算出正確棋子數量,越接近正確答案越好!

二、 作業環境

Windows 10

OpenCV 4.5.5                                                             

Visual Studio 2017

三、 實作方法

1.          讀取圖片,並轉為灰階圖片。

2.          對圖片做GaussianBlur再對圖片做Binarization_invert,盡量減少圍棋反光點的數量。

3.          對圖片做erosion和opening(先做erosion再做dilation)處理

4.          使用findContours()偵測輪廓計算圍棋數量

四、執行結果

IMG_5702 (24/24)

IMG_5703 (24/31)


IMG_5704 (31/31)

偵測圍棋數量


2022年6月3日 星期五

s1073318 作業6

 一、 作業說明

請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。

二、 作業環境

Windows 10

OpenCV 4.5.5                                                             

Visual Studio 2017

三、 實作方法

Encode:

1. 讀取圖片,使用split()得到圖片的三個channel。

2. 分別對三個channel處理,把pixel value轉換成(number of pixel, value of pixel),(0,0)為end of line、(0,1)為end of image。

3. 新增檔案img1.dat,寫入number of rows、number of cols、Run Length Encode data。

Encode function


Decode:

1.      讀取img1.dat,讀取number of rows、number of cols並建一個cv::Mat::zeros(row, col, CV_8UC3);

2.      讀取Run Length Encode data依照資料assign value。

3.      顯示decode後圖片。

Decode function


Compression rate:

Img1: 14322/6068=2.36

Img2: 14322/10254=1.40

Img3: 14322/5579=2.57

Avg: (2.36+1.40+2.57)/3=2.11


四、執行結果

Img1

Img1 decoded

Img2

Img2 decoded

Img3

Img3 decoded

File size compare

2022年5月15日 星期日

s1073318 作業5

 一、 作業說明

撰寫一個程式將所附圖像flower.jpg的黃色花瓣區域擷顯示出來。

二、 作業環境

Windows 10

OpenCV 4.5.5

Visual Studio 2017

三、 實作方法

1. 讀取圖片,把圖片color space轉換成HSV表示。

2. 設定黃色的lowerbound(0,100,150), upperbound(40,255,255),使用inRange()函式取得黃色區域的mask。

3. 使用bitwise_and取出圖片黃色花瓣部分。

四、執行結果

原圖


hsv color space


lowerbound(0,100,150), upperbound(40,255,255) 取得的mask


最後取出的黃色花瓣部分


2022年4月14日 星期四

s1073318 作業4

 一、 作業說明

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

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

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

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

二、 作業環境

Windows 10

OpenCV 4.5.5

Visual Studio 2017

三、 實作方法

(1)

1.讀取灰階圖片,對圖片增加zero padding得到fp(x,y)

2.置中低頻區,對fp(x,y)乘上fftshift:(-1)^(x+y)

3.把圖片轉為複數型式,用內建函數dft()對圖片做傅立葉轉換

4.使用內建函數split()得到圖片傅立葉轉換後的實部、虛部,使用內建函數cartToPolar()得到頻譜大小、相位角度

(2)

1.讀取灰階圖片,對圖片增加zero padding得到fp(x,y)

2.置中低頻區,對fp(x,y)乘上fftshift:(-1)^(x+y)

3.把圖片轉為複數型式,用內建函數dft()對圖片做傅立葉轉換

        4.產生與fp(x,y)相同大小的Gaussian kernel H(u,v)

5.使用內建函數split()得到圖片傅立葉轉換後的實部、虛部,對實部、虛部分別乘上H(u,v),相當於對頻譜大小乘上H(u,v)且不改變相位角度

6.對上一步結果做逆傅立葉轉換,再乘上fftshift,裁切左上方四分之一圖片,即得到高斯模糊後的圖片

 

Gaussian kernel H(u,v):




Gaussian kernel(D0=50)


四、執行結果

原圖


頻譜大小


相位角度


高斯模糊結果(D0=50)

2022年3月17日 星期四

s1073318 作業3

 一、 作業說明 

撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)

二、 作業環境

    Windows 10

    OpenCV 4.5.5

    Visual Studio 2017

三、 實作方法

    1.          以灰階讀取圖片

    2.          用GaussianBlur降低雜訊對邊緣偵測的影響

    3.          用Sobel Operator分別對x方向y方向做處理,再用addWeight合併結果,得到Edge Detection圖

    4.          對Edge Detection圖做bitwise_not

    5.          Edge Detection圖中一些線條過深,把顏色過深的的pixel調成lower_bound值

    6.          合併Edge Detection圖和灰階圖

四、執行結果

Source
Gray Scale
Blurred
Edge
Edge_invert

Filtered

Result

2022年3月6日 星期日

s1073318 作業2

 一、 作業說明 

撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋 轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。

二、 作業環境

Windows 10

OpenCV 4.5.5

Visual Studio 2017

三、 實作方法

1.      輸入一張圖片,長寬中較小值的一半為半徑上限。

2.      拉動trackbar時呼叫RotateImage(),首先檢查半徑值。

a.      半徑值為0時,以圖片中心旋轉整張圖片。使用getRotationMatrix2D()取得旋轉矩陣,再使用warpAffine()對圖片修改後顯示出來。

b.     半徑值大於0時,先依照半徑值以圖片中心為圓心產生mask、mask_inv。用這兩個mask把原圖切成兩份,中央圓形部分使用getRotationMatrix2D()取得旋轉矩陣,再使用warpAffine()對圖片修改。最後把背景和旋轉過的圓形用add()合起來顯示。


mask

mask_invert

foreground

background

四、 執行結果

source

rotate 45 degree(radius=0)

rotate 45 degree(radius=169)