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

2021年6月13日 星期日

s1071441 影像處理作業7

 一、作業說明

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


二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

OpenCV 4.5.1.48

Python 3.8.3

Numpy 1.19.5


三、實作方法與分析

讀圖轉灰階並二值化

先用close運算盡量去掉反光的區域

用getStructuringElement 方法用MORPH_ELLIPSE 做kernel

用erode做腐蝕並用較小的kernel做dilate

藉由相連區域區分每個相連的區域取出每個相連區域的面積,並把面積過大的相連區域取出


為避免原本就很小的區域被erode到消失,把面積大的去出來特別做erode

--->

addweighted回原圖

但發現其中一張圖有一顆圍棋反光面積過大,導致二值化再腐蝕會消失


最後選擇先用霍夫測圓

把已經測到的圓去掉
做erode-->

最後把測到的圓的數量跟erode之後剩下的相連區域數量加起來
準確率100%

分析 : 做erode用的kernel 大小跟形狀都很重要,一開始用初始的矩形kernel怎麼都做不好,換成MORPH_ELLIPSE後結果就變好多了


四、執行結果




22 + 2 = 24 (實際24顆)



29 + 2 = 31(實際31顆)


31 + 0 = 31(實際31顆)






2021年6月7日 星期一

s1071441 影像處理作業 8

 一.作業說明

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

二.執行結果





2021年6月6日 星期日

s1071441 的作業 6

 一、作業說明

附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。


二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

OpenCV 4.5.1.48

Python 3.8.3

Numpy 1.19.5


三、實作方法

compress:

cv2.imread 讀取bmp

cv2.split 將b, g, r 通道分開,分開做run length 就可以不用三通都一樣才能合併

將三通道都 reshape 成 1維

三通道個別做run length encoding

轉換成byte的形式

重複值的數量用 1 byte 存,超過的分割存,channel的值也用1 byte 存

header放 圖片長寬、 bgr的長度

存成二元檔


decompress:

將header的資訊個別讀出來

將三通道的run length 結果讀出來

將 bytes 轉回 int

將run length encoding 轉回 1維陣列

reshape 回圖片長寬

將b, g, r三通道合併成最後的結果


四、執行結果和分析

img1.bmp

壓縮率 : 13.9 / 2.10 = 6.619


img2.bmp
壓縮率 : 13.9 / 3.45 = 4.028


img3.bmp



壓縮率 : 13.9 / 2.00 = 6.95

平均壓縮率 : (13.9 * 3) / (2.1 + 3.45 + 2.0) = 5.523
倒數 : 18.1 %

分析 : 如果能更有效的控制儲存數量用的byte數,還能更有效率的壓縮

2021年5月18日 星期二

s1071441 影像處理作業5

 一、作業說明

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


二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

Python 3.8.3

OpenCV 4.5.1.48

Numpy 1.19.5


三、實作方法與分析

以二元檔方式讀入raw檔

前32bytes 中 [4:8]bytes為width , [8:12]bytes為height , [12:16]bytes為channel

將width, height, channel 用 struct.unpack 轉成 int32

剩下的部分每4bytes為一個pixel的高度資訊,將其切割用struct.unpack轉成float

先將 invalid value -99999.0 設成 np.nan

找出除了invalid value 以外的最大值及最小值

將invalid value 換成 最小值

reshape成 (height, width, channel)

將所有高度資訊scale到 0~255





以灰階圖表示高度

將灰階圖對應至color map : jet ,以彩色圖表示高度 (藍~紅 = 低~高)

分析:opencv提供很多color map,選擇使人能輕鬆清楚的看出高度差別的color map很重要

四、執行結果 

    02.bmp


灰階圖表示(黑~白 = 低~高)
彩色圖表示(藍~紅 = 低~高)

08.bmp
灰階圖表示(黑~白 = 低~高)
彩色圖表示(藍~紅 = 低~高)

10.bmp

灰階圖表示(黑~白 = 低~高)



2021年5月16日 星期日

s1071441 的作業 4

 一、作業說明

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


二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

OpenCV 4.5.1.48

Python 3.8.3

Numpy 1.19.5


三、實作方法與分析

imread讀取圖片 

先用GuassianBlur 處理掉過度細節及雜訊

HSV:

用cv2.cvtColor() 將圖片轉成hsv color space

決定膚色的範圍 並做出mask

一開始決定為 0<h<40 , 50<s<130 , 50<v<255:


後面的樹葉跟偏紅色的衣服都沒刪掉所以將 h 改成 5<h<20:


膚色較深的部分被刪掉了且沙子很多沒刪掉,所以將 s 改成 70<s<150,v改成20<v<255:

標示出來:

---------------------------------------------------------------------------------------------------------

RGB:

一開始將膚色範圍設成: R>95 and G>40 and B>20 and R>G and R>B:


樹葉跟偏紅色的衣服都沒刪掉,所以將R跟綠G差距 和 R跟B的差距限制加大


偏黑的膚色應該是因為R,G,B的數值比較相近所以也被刪掉了,如果考慮進來可能會導致後面的樹木沒刪掉。標示出來:


---------------------------------------------------------------------------------------------------------
YCbCr:
一開始設的膚色範圍為

133 <= Cr <= 173 , 77 <= Cb <= 127:
樹葉都沒刪掉,所以增加紅色色度Cr的下限至140:

標示出來:
分析:
RGB能直接從三原色的數值及之間的差距控制,所以結果比較容易調到接近最佳
HSV用角度表示所有顏色,比較容易篩選最初的顏色


2021年5月2日 星期日

1071441 影像處理作業 3

 一、作業說明

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

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

(2)對圖像利用 Gaussian Low-Pass filter 處理,輸出平滑後圖像。(程式利用課本的 frequency filter 步驟者可得滿分!) 

二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

Python 3.8.3

OpenCV 4.5.1.48

Numpy 1.19.5

Matplotlib 3.2.2

三、實作方法

    1. imread讀取灰階圖片

    2.  padding,取較大的邊當作要padding的大小

    3. 把基數個位置的pixel乘以(-1),但不會變成負數,所以實際上會以0(黑色)表示

    4. 用 cv.dft做離散傅立葉轉換,

        再用magnitude()跟phase()求頻譜大小跟相位圖,並中心化

    5. 建立頻域用的Guassian low-pass filter

    6. 對頻譜圖用Guassian low-pass filter

    7. 用cv.idft做反離散傅立葉轉換

    8. 裁剪成原本圖片的大小

四、執行結果