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

2022年6月8日 星期三

s1081528 作業7

作業說明

請撰寫一個程式,利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數。
a. 請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b. 程式不一定可以算出正確棋子數量,越接近正確答案越好!

開發環境

  • Windows 11
  • Visual Studio Code
  • Anaconda 4.11.0
  • OpenCV 4.5.5

程式說明

  1. 以imread()讀取圖像
  2. 因圖像過大,需要以resize()調整圖像大小
  3. 將圖像轉成灰階圖
  4. 用GaussianBlur()把圖像變得更平滑,去除雜訊
  5. 以threshold()將圖像二值化
  6. 先用erode()移除雜訊,再用dilate()進行影像膨脹
  7. 使用HoughCircles()找出圖像中所有棋子(圓形),再將偵測到的棋子以紅圈標註起來

實作結果


原圖

Erosion+Dilation

偵測後的結果

與原圖的棋子數量比較



2022年6月1日 星期三

s1081528 作業6

 作業說明

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

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

部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。

開發環境

  • Windows 11
  • Visual Studio Code
  • Anaconda 4.11.0
  • OpenCV 4.5.5

程式說明

I. 壓縮
      i. 用imread讀取檔案後,以spilt()將RGB通道分開
     ii. 使用flatten(),將二維變成一維
    iii. 用RLE這個function,分別對R、G、B通道進行處理,再把三通道壓縮後的資料放在一起,並變成tif檔



II. 解壓縮
    用RLE_decode這個function解壓縮,使用reshape將三通道復原,並用merge合併,得出無失真圖檔


III. 平均壓縮率
個別算出圖檔的壓縮率,最後相加並平均,得出平均壓縮率

實作結果

解壓縮後的圖檔




各圖的壓縮率與平均壓縮率


2022年5月19日 星期四

s1081528 作業5

 

作業說明

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

開發環境

  •  Windows 11
  • Visual Studio Code
  • Anaconda 4.11.0
  •  OpenCV 4.5.5

程式說明

  1. 使用imread(path)來讀取圖像
  2. 根據講義上的公式,進行RGB轉HSI

  3. 利用inRange,設定色彩的最低值與最高值,以形成遮罩
  4. 使用cv2.bitwise_and,得出黃色花瓣區域

實作結果

原圖


HSI圖


遮罩(mask)


黃色花瓣區域


2022年4月14日 星期四

s1081528 作業4

 

作業說明

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

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

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

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

開發環境

  • Windows 11
  • Visual Studio Code
  • Anaconda 4.11.0
  • OpenCV 4.5.5

程式說明

使用imread(path,cv2.IMREAD_GRAYSCALE)來讀取圖像,呈現灰階模式。

(1)   離散傅立葉轉換

ⅰ.用Zero padding將圖像大小變成2M*2N(原為M*N),並將原圖放在左上角。

ⅱ.圖像乘上(−1)x+y達成中心化。



ⅲ.使用magnitude()得到頻譜圖。

ⅳ.使用phase()得到相位圖。

(2)   Gaussian Low-Pass filter

ⅰ.根據公式 先計算D(u,v)再計算H(u,v),最後代入公式(F(u, v)為傅立葉轉換)。

Gaussian Low-Pass Filter, D0=30

ⅱ.對G(u,v)做反傅立葉轉換,得到原圖。

實作結果

原圖



過程




2022年3月17日 星期四

s1081528 作業3

作業說明

撰寫一個程式,以灰階模式讀取一張圖像imread(path,IMREAD_GRAYSCALE)

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

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

開發環境

  • Windows 11
  • Visual Studio Code
  • Anaconda 4.11.0
  • OpenCV 4.5.5

程式說明

使用imread(path,cv2.IMREAD_GRAYSCALE)來讀取圖像,呈現灰階模式。

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

        ⅰ. 用Sobel運算元分別算出x和y的梯度,如下圖所示。

x梯度

y梯度


        ⅱ. 將梯度轉成uint8,再以addWeighted將圖像融合。

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

        ⅰ. 將圖像顏色反轉。


        ⅱ. 將圖像增加高斯濾波。

        ⅲ. 用divide再顏色反轉。

實作結果

原圖


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


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


2022年3月5日 星期六

s1081528 作業2

 

作業說明

撰寫一個程式讀取一張圖片,將圖像中每一個點像素的值各加上一個數值。如果輸入圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖(RGB),則只改變每個像素的R值。

注意修改後像素值溢位Overflow問題(像素值介於0與255之間)。

開發環境

  • Windows 10
  • Visual Studio Code
  • Anaconda 4.11.0
  • OpenCV 4.5.5

程式說明

  1. 使用imread來讀取圖像。
  2. 利用遮罩(mask)來將圖像分別處理,中心內切圓部分挖空,以及保留中心內切圓部分,如下圖所示。
    中心內切圓部分挖空

    保留中心內切圓部分

  3. 旋轉的部分,分為(a)整張圖像,以及(b)中心內切圓區域:
          (a) 整張圖像
                ①利用trackbar來調整圖像角度數值
                ②接著用getRotationMatrix2D及warpAffine來控制旋轉
                ③最後以imshow來顯示trackbar與圖像
          (b) 中心內切圓區域
                ①利用trackbar來調整保留中心內切圓圖像角度數值
                ②接著用getRotationMatrix2D及warpAffine來控制其旋轉
                ③再來需要將中心內切圓部分挖空的圖像及保留中心內切圓的圖像做合併
                ④最後以imshow來顯示trackbar與合併後的圖像

實作結果

(a)整張圖像

(b)中心內切圓區域

2022年2月23日 星期三

s1081528 作業1

作業說明

撰寫一個程式讀取一張圖片,將圖像中每一個點像素的值各加上一個數值。如果輸入圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖(RGB),則只改變每個像素的R值。

注意修改後像素值溢位Overflow問題(像素值介於0與255之間)。

開發環境

  • Windows 10
  • Visual Studio Code
  • Anaconda 4.11.0
  • OpenCV 4.5.5

程式說明

  1. 使用imread來讀取圖像。
  2. 判斷目前讀入的影像為灰階或全彩圖,如果每個像素中B、G、R通道的值相同,則為灰階圖。
  3. 判斷輸入的數字是否超過範圍(-255~255),如超出範圍,則重新輸入。負數為調暗,正數為調亮。
  4. 如果圖像為全彩圖像,則改變每一點像素R通道的數值,加上輸入的數字;如果圖像為灰階圖像,則改變每一點像素的數值,加上輸入的數字。
  5. 當相加後的像素值大於255,則將其數值視為255;當相加後的像素值小於0,則將其數值視為0。
  6. 用imwrite儲存修改後的圖像。
  7. 用imshow顯示修改後的圖像。

實作結果

超出範圍:

輸入260或-260(顯示out of range)


灰階圖像:

原圖

輸入100

輸入-100

彩色圖像:

原圖

輸入100

輸入-100