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

2022年6月1日 星期三

s1083304作業7

 一、作業題目

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

二、環境設置

    windows10

    python 3.10.2

    vscode 1.64 

    opencv 455

三、作業說明

    1. 以灰階讀入圖片

    2. 模糊化圖片後,再做二值化,黑白對調

    3. 設定kernel,對圖片做適當 erode() 分離輪廓,再做 dilate() 

    4. findContours() 取輪廓,print 找出的輪廓總數,把 mask 存下來

、執行結果

                                                                         IMG1


IMG1 mask

算出的棋子數:19


IMG2


IMG2 mask

算出的棋子數:22


IMG3


IMG3 mask

算出的棋子數:31





ฅ^•ﻌ•^ฅ

s1083304作業6

 1. 作業說明

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

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

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

2.開發環境

Windows 10

Visual Studio Code 1.64

OpenCV 455

3. 實作方法

encode.py:

1. 讀入圖片後,用split()分離BGR通道,並使用flatten()將各通道一維化。

2. 自訂一個 RLEencode() 對各通道做壓縮,頭兩個資料存原圖長寬h,w,主要格式為(重複出現次數,數值),ex:[ 0 0 0 0 0 1 1 4 4 4 ] -> [ 5 0 2 1 3 4 ] ,各通道用 'b' , 'g' , 'r' 分離辨別。

3.最後計算出 compress ratio 和 average compress ratio 

decode.py:

1.open txt and read

2.照重複出現次數和數值復原BGR。

3.分別把BGR list 照原圖h,w reshape(),用 astype() 設定為 uint8

4.將三通道 merge() 起來,得到原圖。

4. 執行結果

                                                       壓縮檔格式

                                                                           頭

                           


                                                                           尾

                               

                                                           compression ratio

                                

img1 encode -> decode

img2 encode -> decode


img3 encode -> decode



2022年5月17日 星期二

s1083304 作業5

 1. 作業說明

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

2. 開發環境

    Window 10

    Visual Studio Code 1.64

    OpenCV 4.5.5

3.實作方法

1.用imread()讀取圖片

2.用cvtColor將原圖轉為hsv

3.設定yellow的 upper 和 lower

4.生成一個 mask 遮罩(原圖黃色部分為白色,其餘部分為黑色)

5.用 bitwise_and()   把原圖和遮罩合併並輸出

4.執行結果

                                                                        原圖

                                                        

                                                                        hsv

    
                                                                       mask
    
                                                                     結果圖


2022年4月13日 星期三

s1083304 作業4

  1. 作業說明

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

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

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

2. 開發環境

Windows 10

Visual Studio Code 1.64

OpenCV 4.5.5.

3. 實作方法

(1)

1. cv2.IMREAD_GRAYSCALE 讀入灰階圖片

2. 用 getOptimalDFTSize() 還有 copyMakeBorder() ,存下實部和虛部,最後用 merge() 合併通道 

3. dft()進行傅立葉轉換

4. split() 分離通道,以 magnitude() 取得頻譜,phase() 取得相位角,將複數轉為幅值

5. log() 對圖片做對數縮放

6. 對圖片幅度分布圖做中心化,最後normalized()控制值於 0,1 之間並輸出

(2)

1. cv2.IMREAD_GRAYSCALE 讀入灰階圖片

2. 建立一個 5*5 高斯低通卷積核矩陣 kernel,中心點權重偏重,水平垂直方向呈高斯分布,如下:



3. 自定義函數,先對圖片做邊緣擴充 kernel 大小

4. for loop 對圖片各個點做卷積,原圖各點圖像乘上 kernel 對應數並相加,最後將圖片截為原圖尺寸並回傳

5. 最後以 pyplot.imshow 以 cmap='gray' 輸出,對比原圖

4. 執行結果

原圖
    

                                                         Spectrum Magnitude

    

                                                                     Phase

    

                                                           Guassian Low Pass

   

                                                                       對比圖    

                                              原圖                                     Gaussian Low pass



2022年3月18日 星期五

s1083304 作業3

1. 作業說明

撰寫一個程式, 以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)
(a)
利用 Sobel Operators 偵測並輸出邊緣成分圖
(b)設計一個類似素描線條的自畫像圖案。 (想想:如何使用邊緣偵測所得到的點,結合
成看似素描筆畫出的線條
?)

2. 開發環境

Windows 10

Visual Studio Code Ver 1.64

OpenCV 4.5.5

3. 實作方法

(a)

1. 利用 imread 以 IMREAD_GRAYSCALE 方式讀取圖片

2. 用 Sobel 和 convertScaleAbs 函數對x, y邊緣檢測

3. 使用addweighted將兩張邊緣檢測處理完的圖片合併

(b)

1. 利用 imread 以 IMREAD_GRAYSCALE 方式讀取圖片

2. 用 GaussianBlur 對讀入圖片做模糊處理

3. 用 Sobel 和 convertScaleAbs 函數對x, y邊緣檢測

4. 使用addweighted將兩張邊緣檢測處理完的圖片合併

5. 將圖片作色彩反轉

6. 對圖片做 threshold() 二值化

4. 執行結果

( a )



( b )



2022年3月7日 星期一

s1083304 作業2

 1. 作業說明

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

2. 開發環境

Windows 10

Visual Studio Code Ver 1.64

OpenCV 4.5.5

3. 實作方法

旋轉整張圖片:

使用createTrackBar搭配getRotationMatrix2D和warpAffine完成

僅旋轉內切圓部分圖片:

1.以原圖尺寸生成兩張RGB圖片,分別為內切圓部分像素值設定為白色(255,255,255),其餘設定為黑色(0);以及內切圓部分像素值設定為黑色(0),其餘設定為白色(255,255,255)

2.使用createTrackBar搭配getRotationMatrix2D和warpAffine旋轉圓圖並與圖片1使用cv2.bitwise_and()合併取得內切圓旋轉的部分。

3.將原圖與圖片2使用cv2.bitwise_and()合併取的外圍不變的部分

4.使用cv2.add()將兩張合併過的圖片相加,輸出結果圖片。


4.執行結果

                            整張圖片旋轉 45 度


                                    僅內切圓部分圖片旋轉 45 度


2022年2月24日 星期四

s1083304作業1

 

2022年2月24日 星期四

s1083304 作業1


1. 作業說明

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

2. 開發環境
        
  •    Window10   
  •    Microsoft Visual Studio Code Ver 1.64
  •    OpenCv 4.5.5
3.實作方法
    
    1.使用cv2.imread讀入圖片,要求使用者輸入欲修改的值。

     2.copy一份同樣圖片並將其data type轉成int32,方便之後計算使用。

     3.撰寫一涵式使用 Pillow 用迴圈比對各個像素的RGB值,若皆相等代表讀入圖片為黑白圖片,
        反之則為彩色圖片。

     5.若為黑白圖片,修改各像素灰階值。若為全彩圖片,僅修改其R值。

     6.用迴圈掃描各個像素,若其RGB值超過255則定其為255,若低於0則定其為0。

     7.最後將data type轉回 uint8,輸出圖片。

4.執行結果

                                                                   彩色圖片 +100    
    

    
                                                                               彩色圖片 -100
            

黑白圖片 +100


黑白圖片 -100