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

2022年6月2日 星期四

s1071552 作業7


1.作業說明

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

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

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

2.開發環境

ios 10.15.7 
Jupyter Notebook
OpenCV - 4.5.5

3.實作方法


1.讀取檔案,並轉為灰階圖像。 
2.使用數學型態學影像處理運算erode(),dilate(),將圍棋與圍棋分開。 
3.輸出圖像大小,根據其調節minRadius和maxRadius。 
4.運用HoughCircles偵測圍棋 :
image:輸入灰階圖。
method:偵測圓的方法,使用CV_HOUGH_GRADIENT。
dp:偵測解析度倒數比例,設dp=1,偵測圖和輸入圖尺寸相同。
minDist:圓彼此間的最短距離,太小的話可能會把鄰近的幾個圓視為一個,太大的話可能會錯過某些圓。
param1:圓偵測內部會呼叫Canny()尋找邊界,param1就是Canny()的高閾值,低閾值自動設為此值的一半。
param2:計數閾值,超過此值的圓才會存入circles。
minRadius:最小的圓半徑。
maxRadius:最大的圓半徑。 
5.輸出檢測到的圓個數 
6.根據檢測到的資訊畫出圓 
7.用指定顏色標出圓的位置 
8.存取標記後影像

4.執行結果

IMG_5702.jpg 實際數量:24個
原圖(左) / 數學型態學影像處理運算後的圖像(右):


程式輸出棋子數量:24個(截圖)



IMG_5703.jpg 實際數量:31個 
原圖(左) / 數學型態學影像處理運算後的圖像(右):

    

程式輸出棋子數量:31個(截圖)


IMG_5704.jpg 實際數量:31個
原圖(左) / 數學型態學影像處理運算後的圖像(右):


程式輸出棋子數量:31個(截圖)





s1071552 作業6


1.作業說明

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


2.開發環境

ios 10.15.7 
Visual Studio Code 1.63 
OpenCV - 4.5.5

3.實作方法


Compress: 
1.讀取.bmp檔案 
2.將圖片RGB三通道分離 
3.RGB分別進行Run-Length壓縮 
4.將RLE壓縮結果存至.dat檔案 

Decompress: 
1. 讀取壓縮完成之.dat檔案 
2. 將資料還原長、寬、RGB三通道 
3. 三個channel各自復原 
4. 將RGB解壓縮後寫到.bmp檔


4.執行結果

img1原圖(.bmp)、壓縮(.dat)、解壓縮(.bmp)檔案大小: 

壓縮比:14.7mb / 2.2mb = 6.68

img1原圖(.bmp)與解壓縮(.bmp)結果:



img2原圖(.bmp)、壓縮(.dat)、解壓縮(.bmp)檔案大小: 





壓縮比:14.7mb / 3.6mb = 4.08

img2原圖(.bmp)與解壓縮(.bmp)結果:


img3原圖(.bmp)、壓縮(.dat)、解壓縮(.bmp)檔案大小:


 壓縮比:14.7mb / 2.1mb = 7

img3原圖(.bmp)與解壓縮(.bmp)結果:



壓縮檔格式:.dat 
平均壓縮率:(6.68 + 4.08 + 7) / 3 = 5.92







2022年5月18日 星期三

s1071552 作業5


1.作業說明

Color Space Transformation: 

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


2.開發環境

ios 10.15.7 
Visual Studio Code 1.63 
OpenCV - 4.5.5

3.實作方法


1.運用OpenCV提供之讀取圖片檔函數cv2.imread將圖片讀取進來
2. (1) 運用cv2.cvtColor將rgb圖片轉換到hsv色彩空間
   (2)根據公式定義函式:



3.設定黃色的上下界
4.利用inRange()得到mask
5.最後使用bitwise_and()即可得黃色部分


4.執行結果

原圖

HSV

MASK

結果











2022年4月13日 星期三

s1071552 作業4


1.作業說明

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

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

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


2.開發環境

ios 10.15.7 
Visual Studio Code 1.63 
OpenCV - 4.5.5

3.實作方法


1. 
(1) 運用OpenCV提供之讀取圖片檔函數cv2.imread將圖片讀取進來。 
(2) 將圖片Zero Padding成2M*2N的圖 ,並且讓圖維持在左上角。 
(3) 讓頻譜置中,將圖的顏色值存入 f(u,v) 再做 DFT 得到 F(u,v)。











(4) 將上述公式取得之實數存放第一個陣列, 虛數存放第二個陣列, 並且計算Spectrum的值和Phase angle的值。









(5) Spectrum不易觀察,故進行log算法,log (1+sqrt(r*r+i*i)), 並將Spectrum和Phase angle 的值域調整至0~255


2. 方法一: 
(1) 由上述步驟得到的傅立葉轉換F(u,v),計算 D(u,v) 與H(u,v)。





(2) 再計算G(u,v)=H(u,v)*F(u,v),對G(u,v)做inverse







(3) 將圖片裁切左上角轉回原圖


方法二: 
(1)計算Mask





(2)對原圖周圍做Padding 

(3)用計算出的Mask對原圖做Convolution


4.執行結果

原圖

padded 0

中心化 *pow(-1, i + j)

 Spectrum

phase

平滑後之圖像







2022年3月22日 星期二

s1071552 作業3


1.作業說明

撰寫一個程式,以灰階模式讀取一張圖像:

(a)利用 Sobel Operators 偵測並輸出邊緣成分圖 

(b)設計一個類似素描線條的自畫像圖案


2.開發環境

ios 10.15.7 
Visual Studio Code 1.63 
OpenCV - 4.5.5

3.程式說明


1.使用灰階模式讀取圖片後利用Sobel Operator分別對x方向y方向做處理,再用addWeight合併結果,得到偵測出邊緣之圖
2.素描方式:
   2.(a)將上圖利用255減去灰階值獲得素描,但因為圖片有雜訊所以再遍歷所有像素判斷閾值高於某值就直接設為255
   2.(b)由於方法a改值仍有雜訊故再使用雙邊濾波和高斯濾波處理圖片
   2.(c)上述方法皆為使用題目規定之 Sobel Operators再做處理, 此方法則直接改用canny edge detection再加上濾波。


4.執行結果


原圖


以灰階模式讀取完之圖片



用 Sobel Operators偵測出的邊緣成分圖


素描一(255減去灰階值)



素描二(素描一加上閾值判斷及濾波)




素描三(改用canny edge detection 加上濾波)




2022年3月6日 星期日

s1071552 作業2


1.作業說明

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


2.開發環境

ios 10.15.7 
Visual Studio Code 1.63 
OpenCV - 4.5.5

3.程式說明


1.讀取圖片後先計算內切圓半徑
2.利用mask先建立一張只剩內切圓部分的圖片,再透過cv2.circle建立另一張在內切圓部分為黑的圖片
3.建立兩個Trackbar並設定旋轉之角度上下限為0至359度
   3.(a)旋轉整張照片:
         使用cv2.warpAffine及cv2.getRotationMatrix2D旋轉整張圖片。
   3.(b)旋轉中心內切圓區域:
         使用cv2.warpAffine及cv2.getRotationMatrix2D將內切圓區域進行旋轉。
         再利用cv2.add將已旋轉的內切圓部分與內切圓外的部分疊在一起。


4.執行結果


原圖


旋轉中心內切圓區域(50度)


旋轉整張圖(50度)


執行影片





2022年2月23日 星期三

s1071552 作業1


1.作業說明

撰寫一個程式讀取一張圖片,將圖像中每一個點像素的值各加上一個數值。如果輸入圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖像(RGB),則只改變每個像素的 R 值。修改後像素值溢位Overflow 問題(像素值介於 0  255 之間)

2.開發環境

ios 10.15.7 
Visual Studio Code 1.63 
OpenCV - 4.5.5

3.程式說明

1.使用imread來讀取圖像
2.判斷讀入的圖像為全彩圖像還是灰階圖像,判斷方式為比較圖像每個像素中的RGB通道中的值,若相同則表示此圖像為灰階圖。
3.若為灰階的圖則每個像素的RGB通道的值都要加上輸入的數值,若為全彩圖像則R通道加上輸入的數值即可,兩者皆要判斷是否有溢位的問題(若大於255則設為255,小於0則設為0)
4.最後使用imshow顯示加上數值後的圖像

4.執行結果

讀取圖片:lennaRGB.tif
原圖: 
輸入數值:150
輸入數值:-150


讀取圖片:bookGray.jpg
原圖:
輸入數值:150 
輸入數值:-150