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

2021年6月11日 星期五

s1071536 影像處理作業7

    一、作業說明 

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


二、作業環境

●    Windows 10
●    Python 3.7.10
●    opencv 4.2.0

三、實作方法

Way1
1.讀入圖片
2.將圖片轉成灰階
3.用較大的Kernal對灰階圖做Erosion
4.用較小的Kernal對灰階圖做Erosion
5.對灰階圖做Dilation
6.使用cv2.findContours尋找輪廓,並利用找到的輪廓數作為預測的棋數

Way2
1.讀入圖片
2.將圖片轉成灰階
3.對原圖做cv2.HoughCircles並將中心點用黑色覆蓋在灰階圖上
4.用較大的Kernal對灰階圖做Erosion
5.用較小的Kernal對灰階圖做Erosion
6.對灰階圖做Dilation
7.在灰階圖上畫上cv2.HoughCircles的結果
8.使用cv2.findContours尋找輪廓,並利用找到的輪廓數作為預測的棋數

四、執行結果

● 左圖為Way1,右圖為Way2
● HoughCircles只出現在Way2中,故只有一張圖

Predict Result
Way1 vs Way2

Original Image
output_IMG_5702.JPG

HoughCircles
Additional step in Way2

Erosion
*Way2: original image(gray) - houghcircles -> erosion

Dilation
*Way2: (previous step result -> dilation) + houghcircles

Contours

Original Image
output_IMG_5703.JPG

HoughCircles
Additional step in Way2

Erosion
*Way2: original image(gray) - houghcircles -> erosion

Dilation
*Way2: (previous  step result -> dilation) + houghcircles

Contours

Original Image
output_IMG_5704.JPG

HoughCircles
Additional step in Way2

Erosion
*Way2: original image(gray) - houghcircles -> erosion

Dilation
*Way2: (previous step result -> dilation) + houghcircles 

Contours




2021年6月7日 星期一

s1071536 影像處理作業8

一、作業說明 

請寫一個程式將附圖二值化後輸出黑白圖像。
目的是將文字與背景分離。


二、作業環境

●    Windows 10
●    Python 3.7.10
●    opencv 4.2.0

三、執行結果
原圖


結果圖

2021年6月5日 星期六

s1071536 影像處理作業6

   一、作業說明 

附件中為三張利用將高度以色彩視覺化後的圖片。

請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。


二、作業環境

●    Windows 10
●    Python 3.7.10
●    opencv 4.2.0
●    imagehash 4.2.0

三、實作方法

Compress
1.讀入圖片(.bmp)
2.將圖片的BGR三個channel分離(2D Array)
3.將各自channel資料flatten後(2D->1D)再合併成1D Array
4.使用RLE壓縮演算法將1D資料壓縮並寫入bin file中

Decompress
1.讀入壓縮檔案(.bin)
2.逆著RLE壓縮演算法的步驟得到壓縮前1D的資料
3.將1D資料分成BGR channel(1D Array)
4.將RGB channl各自資料reshape成2D後再merge成3D
5.輸出圖片

Verification
1.讀入原本的圖片以及解壓縮後的圖片
2.使用imagehash 對圖片hash,並比較之間的差異

四、執行結果

Average compression ratio = (6.642+4.041+6.967)/3 = 5.883

img1.bmp_compression ratio: 6.642

img2.bmp_compression ratio: 4.041

img3.bmp_compression ratio: 6.967

2021年5月17日 星期一

s1071536 影像處理作業5

   一、作業說明 

附件中的讀.row晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的Color顏色的知識與處理技術,撰寫一個程式來讀取附件中的讀.row 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。


二、作業環境

●    Windows 10
●    Python 3.7.10
●    opencv 3.4.2

三、實作方法

1.將raw檔讀入(header、data)
2.找到data中的max和min值,並將所有值為-99999.0改為min值
3.以min和max值為上下限將data比例縮放到0~255中
4.將data轉uint8並儲存照片

四、執行結果

02.raw

08.raw

10.raw

2021年5月16日 星期日

s1071536 影像處理作業4

  一、作業說明 

利用你所學的Color顏色的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。


二、作業環境

●    Windows 10
●    Python 3.7.10
●    opencv 3.4.2

三、實作方法

1.使用CV2.imread讀入圖片
2.將圖片(BGR)轉成HSV和YCrCb
3.在HSV中制訂膚色範圍,並將圖片以制訂的膚色範圍進行二值化,接著對二值化後的圖做medianBlur得到blur_hsv_mask
4.利用Human Skin Detection Using RGB, HSV and YCbCr ColorModels提到的Proposed Skin Detection Algorithm對圖片進行二值化取得PSD_mask
5.blur_hsv_mask & PSD_mask得到skin_mask
6.以skin_mask在原圖上標示皮膚以及過濾原圖

四、執行結果
input

blur_hsv_mask

PSD_mask

skin_mask

output(標記皮膚)

output(過濾皮膚)

input2

output2

input3

output3

input4

output4

input5

output5
圖片來源:


2021年5月1日 星期六

s1071536 影像處理作業3

 一、作業說明 

請撰寫一個程式,讀取一張 256 色灰階圖像。 
(1)計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階 256 色圖像 方式呈現出。
(2)對圖像利用 Gaussian Low-Pass filter 處理,輸出平滑後圖像。(程式利用課本的 frequency filter 步驟者可得滿分!)

二、作業環境

●    Windows 10
●    Python 3.7.10
●    opencv 3.4.2
●    numpy 1.19.5
●    matplotlib 3.3.4


三、實作方法

1.使用imread將圖片以灰階方式讀入
2.使用zero padding將圖片補到2M*2N大小(M:圖高,N:圖寬),並讓圖片靠左上
3.multiplying f(u,v) by (-1)^(x+y)
4.使用傅立葉轉換將圖轉成頻域(np.fft.fft2()) -> F(u,v)
5.取得頻譜圖及相位圖(np.angle())
6.建立GaussLowpassFilter(D0 = 100) -> H(u,v)
7.將H(u,v)、F(u,v)相乘取得過濾後的頻譜(G(u,v) = H(u,v) * F(u,v))
8.使用逆傅立葉轉換將資料轉換回spatial domain(np.fft.ifftshift())
9.multiplying real part by (-1)^(x+y)
10.Extracting後得到結果(刪掉padding的資料)

四、執行結果
Padding Image
Spectrum
Phase
H(u,v), D0 = 100
H(u,v) × F(u,v)
The Real part of IDFT of HF, multipled by (-1)^(x+y)
Result
Compare


圖片來源:


2021年3月23日 星期二

s1071536 影像處理作業2

 一、作業說明 

撰寫一個程式,讀取一張 256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可, 如全彩圖像可先將圖片由 RGB 轉換至灰階影像),利用 Sobel Operators 圖像邊緣為基礎,設計一個類似素描線條自畫像程式。

二、作業環境

●    Windows 10
●    Python 3.7.10
●    OpenCV 3.4.2

三、實作方法

1.使用imread將圖片以灰階方式讀入
2.對原圖使用Sobal函式並分別取得x軸方向梯度與y軸方向梯度的圖
3.將兩種不同的梯度圖結合(各自權重為0.5)
4.使用cv2.threshold函式對結合後的圖二值化
   (門檻值為80,最大灰階值為255,二值化類型為cv2.THRESH_BINARY_INV)
5.將圖片儲存並輸出

四、執行結果

input


output


















圖片來源: