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

2019年6月6日 星期四

s1051447的作業5


1072 CS362 影像處理概論Digital Image Processing Assignment #5
1051447 梁雅錡
作業題目: 
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中圍棋個數。

撰寫過程:
(1)   作業系統環境:Windows
(2)   程式語言:Python
(3)   程式開發軟體:Pycharm
(4)   開發環境:
開發環境名稱
使用情形
Python 3.6
採用Python 3.6編寫程式。
OpenCV.4.0.0.21
利用OpenCV 4.0.0.21的套件讀取讀片、對圖片進行各式轉換、以及存取圖片檔。
Numpy 1.15.4
使用Numpy 1.15.4調整圖片的各個像素變動。
Matplotlib2.1.2
Matplotlib2.1.2共同畫出原圖與經衰減、膨脹的處理過程,也可存取所有輸出內容。

(5)   程式內容:
1.首先使用cv2.imread(img,0)將讀取圖轉灰階後,使用cv2.threshold()的域值設定來達到二值化灰階圖的作用;再用cv2.GaussianBlur()來去除雜質。

2.透過腐蝕和膨脹的處理來偵測棋子個數,只需設置好結構元素,然後分別調用cv2.erode(...)cv2.dilate(...)函數即可,其中第一個參數是需要處理的圖像,第二個是結構元素,就可以得到處理好的圖像。

3.其中,cv2.erode()cv2.dilate()均需要設定kernel參數來定義結構元素,我是透過cv2.getStructuringElement()函示來定義,並進行實作。

4.最後用cv2.imshow()來展示每個步驟的處理圖片。

5.使用cv2.imwrite()存取每一個對圖像進行處理後的圖片。




(6)展示結果
圖片 IMG_5702 測試結果:
(偵測結果21)





圖片 IMG_5703 測試結果:
(偵測結果32)



圖片 IMG_5704 測試結果:
(偵測結果32)









2019年5月16日 星期四

s1051447的作業4

1072 CS362 影像處理概論 作業 4
1051447 梁雅錡
作業題目:
利用所學的顏色的知識,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。 


撰寫過程:
(1)   作業系統環境:Windows
(2)   程式語言:Python
(3)   程式開發軟體:Pycharm
(4)   開發環境:

開發環境名稱
使用情形
Python 3.6
採用Python 3.6編寫程式。
OpenCV.4.0.0.21
利用OpenCV 4.0.0.21的套件讀取讀片、對圖片進行各式轉換、以及存取圖片檔。
Numpy 1.15.4
使用Numpy 1.15.4調整圖片的各個像素變動。

Matplotlib2.1.2
Matplotlib2.1.2共同畫出原圖與皮膚偵測圖,也可存取所有輸出內容。

(5)   程式內容:
1.主要演算法是透過Human Skin Detection Using RGB, HSV and YCbCr Color Models 此篇論文中提到的 Skin Detection Algorithm,來進行實作。

2.使用cv2.imread('SkinDetection.jpg')讀取圖片

3.使用cv2.cvtColor(img, cv2.COLOR_BGR2HSV ),將圖片從RGB形式轉為HSV的形式

4.根據論文中第327~328提到的演算法,我會瀏覽image的每個像素,並針對每個像素進行RGB的特定顏色篩選,不在特定範圍內的像素就為非皮膚範圍,以黑色作為該像素的輸出,如左下圖所示;接著還會透過HSV的特定範圍也進行偵測,找到屬於皮膚的範圍,如右下圖所示。
5.在偵測為非皮膚的部分會使用到cv2.bitwise_and()函式,以作為AND的邏輯閘用途,將透過RGB與HSV分別偵測到的皮膚偵測圖合併,而被視為不是皮膚的範圍,會設為黑色來呈現(二值化)。

6.使用plt.show()以共同輸出原圖與皮膚偵測圖,結果如(6)的程式成果所示。

7.使用cv2.imwrite()存取每一個對圖像進行處理後的圖片。


(6)  程式成果:

    I.原圖



     II.皮膚偵測圖(用cv2.bitwise_and()函式,將透過RGB與HSV分別偵測到的皮膚偵測圖合併,被視為不是皮膚的範圍,會設為黑色來呈現(二值化))



      III.共同顯示(使用matplot共同輸出原圖與皮膚偵測圖)



(7)  儲存結果:
      如下圖所示,使用的是cv2.imwrite(),儲存每一個步驟輸出的影像,包括:原圖經RGB篩選出的皮膚偵測圖(非特定範圍內就以黑色輸出)、原圖經HSV篩選出的皮膚偵測圖(灰階)、上述兩個皮膚偵測圖以and邏輯閘合併的共同輸出圖。
                       



2019年5月15日 星期三

s1051447的作業3

1072 CS362 影像處理概論 作業 3
1051447 梁雅錡
作業題目:
撰寫一個程式,讀取一張 256 色灰階圖像。計算輸入圖的離散傅立葉轉換結果,並 將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出。


撰寫過程
(1)   作業系統環境:Windows
(2)   程式語言:Python
(3)   程式開發軟體:Pycharm
(4)   開發環境:

開發環境名稱
使用情形
Python 3.6
採用Python 3.6編寫程式。
OpenCV.4.0.0.21
利用OpenCV 4.0.0.21的套件讀取讀片、對圖片進行各式轉換、以及存取圖片檔。
Numpy 1.15.4
使用Numpy 1.15.4調整圖片的各個像素變動。

Matplotlib2.1.2
Matplotlib2.1.2畫出頻譜圖以及相位圖,存取輸出內容。

(5)   程式內容:
1.在傅立葉的轉換上,我使用Numpy來實現,使用np.fft.fft2(),主要是將空間域轉化為頻率域,第一個參數是輸入影像,它是灰度影第二個參數是可選的,它決定了輸出陣列的大小,如果它大於輸入影的大小,則輸入影象在計算FFT之前填充了0。如果它小於輸入影,輸入影將被裁剪,如果沒有引數傳遞,輸出陣列的大小將與輸入相同。

2.得到結果後,零頻率分量(DC分量)將位於左上角。 如果要將其置於中心位置,則需要在兩個方向上將結果移動,這邊我使用np.fft.fftshift()進行移動,將低頻部分移動到影像的中心。

3.目前得到的結果並不是一個歸一化的影像,我利用20*np.log(np.abs(img))進行歸一化,取得頻譜;接著用numpy自帶的angle函式(np.angle()),可以直接根據複數的實部與虛部求出角度(默認出來的角度是弧度),取得相位。


(6)  程式成果:

    I. 左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖




    II.左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖


     III.左上圖為原圖,右邊依序是原圖轉灰階圖、頻譜圖、相位圖

    依照我的程式成果比較下來,我們可以得到結論是:
  • 在成果中,可以在中心看到更多的白色區域,表示低頻率的內容更多.。
  • 可以將影像視為在兩個方向上取樣的訊號
  • 在X和Y方向上進行傅立葉變換可以得到影像的頻率表示。

(7)  儲存結果:
      如下圖所示,儲存每次matplot畫出的影像,使用的是plt.savefig()。


2019年4月2日 星期二

s1051447的作業2

1072 CS362 影像處理概論 作業 2
1051447 梁雅錡
作業題目:
撰寫一個程式,讀取一張 256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用 Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎,設計一個類似素描線條自畫像程式。


撰寫過程
(1)   作業系統環境:Windows
(2)   程式語言:Python
(3)   程式開發軟體:Pycharm
(4)   開發環境:
開發環境名稱
使用情形
Python 3.6
採用Python 3.6編寫程式。
OpenCV.4.0.0.21 
利用OpenCV 4.0.0.21的套件讀取讀片、畫出不同亮度的圖片、以及存取圖片檔。
Numpy 1.15.4
使用Numpy 1.15.4調整圖片的各個像素變動。

(5)   程式內容:

因為我將使用OpenCV的Sobel Operators技術來實作邊緣偵測,這個技術需使用灰階的影像,基於每個像素灰度的不同,利用不同物體在其邊界處會有明顯的邊緣特徵來分辨。

因此首先需要使用cvtColor套件,將讀取的全彩圖轉換成灰階圖;第二,為了避免偵測到過多雜訊,所以我先將影像模糊化後再處理,利用高斯模糊方法(GaussianBlur);第三,就是使用剛才提到的Sobel套件偵測邊緣,並且畫出邊緣的線條。

其中,Sobel套件可以單除針對X軸、Y軸、X與Y軸抓取其邊緣,輸出的資料型態設定為浮點資料格式CV_64F,最後指定要針對X軸、Y軸、X與Y軸運算。


(6)  程式成果:
以下將展示三種不同圖片的成果,分別為虛擬動畫人物圖、真實女生圖、真實男生圖
    I. 虛擬動畫人物圖




II. 真實女生圖



III. 真實男生圖



    接下來,我將以上使用Sobel Operators技術進行邊緣偵測的成果,與以下使用Canny技術進行邊緣偵測的成果作比較:
    
    在Canny套件的參數中,有兩個參數可以調整,分別是threshold1和threshold2,意思是,圖形的任意點像素,若其值大於threshold2,則認定它屬於邊緣像素,若小於threshold1則不為邊緣像素,介於兩者之間則由程式依其像素強度值運算後決定。


I. 虛擬動畫人物圖
(右下圖中,調整Canny套件中的threshold1為10、threshold2為75)




II. 真實女生圖
(右下圖中,調整Canny套件中的threshold1為15、threshold2為75)



III. 真實男生圖
(右下圖中,調整Canny套件中的threshold1為20、threshold2為45)

    依照我的程式成果比較下來,我們可以得到結論是:

    Sobel:
  • 用於提取邊緣,可以利用快速卷積函數,簡單有效,因此應用廣泛。
  • 缺點是Sobel算子並沒有將圖像的主題與背景嚴格地區分開來,所以提取的圖像輪廓有時並不能令人滿意,但是算法具體實現很簡單。

    Canny:
  • 在線條上的呈現較Sobel要好一些,Canny算子是一個具有濾波,增強,檢測的多階段的優化算子。
  • 它實現起來較為麻煩,需視圖片雜訊多寡,調整threshold。

    

(7)  儲存結果:
      包括原圖在內,我的程式在每一次將圖片做轉換時(灰階、模糊化、邊緣線條),都會儲存一次當前圖片,如下圖所示,使用的是openCV的imwrite套件。






2019年3月20日 星期三

s1051447的作業1

1072 CS362 影像處理概論 作業 1
1051447 梁雅錡
作業題目:
撰寫一個程式從檔案讀取一張圖像,將圖像的每一個點像素的值各加上一個整數值 v(-255 <= v <= 255),並將圖像儲存至一個新圖像檔案中。


撰寫過程
(1)   作業系統環境:Windows
(2)   程式語言:Python
(3)   程式開發軟體:Pycharm
(4)   開發環境:
開發環境名稱
使用情形
Python 3.6
採用Python 3.6編寫程式。
OpenCV.4.0.0.21 
利用OpenCV 4.0.0.21的套件讀取讀片、畫出不同亮度的圖片、以及存取圖片檔。
Numpy 1.15.4
使用Numpy 1.15.4調整圖片的各個像素變動。

(5)   程式內容:

摘要:我使用OpenCVcreateTrackbar套件,製作可以給使用者拉動的trackbar,當使用者移動trackbar的滑桿,利用getTrackbarPos套件,就能取得使用者移動到的位置(position),再針對此位置的數值調整圖片的亮度。

調整亮度步驟:因為trackbar設定數值的最小值(minimal position)必須為0,所以我將trackbar的最大值(maximal position)調整到2倍大小,也就是511因此,當trackbar的滑桿位置位於255,即為圖片本身亮度的初始值(亮度不變);當trackbar的滑桿位置位於0~254,即為亮度-255~-1(亮度減少);當trackbar的滑桿位置位於256~510,即為亮度1~255(亮度增加),即能達到題目所求之調整亮度從-255255的需求。

(6)  程式成果:
I. 正常亮度(初始)



II. 調暗亮度


III. 調亮亮度