發表文章

目前顯示的是有「s1081539」標籤的文章

s1081539 作業6

圖片
 Run-Length Based Image Compression 說明: 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio) 。 1.      開發環境 l    Windows 10 l    Visual Studio 2019 l    C++ l    OpenCV 4.7.0 2.      實作 程式中有 2 個 function ,分別為: (1)    compress :將圖像中像素的 RGB 值用 Run-Length 的方志對圖像進行編碼。 (2)    decode :對已進行過編碼處裡的圖像解碼,以達到壓縮的效果。         流程:用 imread() 讀取圖像 => compress() => decode() => imwrite() 保存結果 3.      結果 l    影片連結 l    平均壓縮率: 44.5614278804 l    壓縮率分別為: 1.          14,665,254 / 300,998 = 48.7220978212 2.          14,665,254 / 331,418 = 44.25002263 3.          14,665,254 / 360,218 = 40...

s1081539 作業5

圖片
 膚色偵測 Skin Color Detection 說明: 利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。(請用附件中的三張照片做測試) Write a program that detect skin color from an image.。 1. 開發環境 Windows 10 Visual Studio 2019 C++ OpenCV 4.7.0 2. 實作 程式中有4個膚色偵測的function,分別為: (1) RGB_detect:是基於RGB的膚色偵測,實作過程就是設定滿足膚色範圍的條件,並將其用紅色標註。 (2) YCrCb_Otsu_detect:首先要先將照片從RGB轉為YCrCb,對其中的Cr分量做Ostu的二值化處理後的到的圖像可用作遮罩,對膚色區域進行標註。 (3) HSV_detector:一樣先將先將照片從RGB轉為HSV,然後在不同顏色空間採取相應的顏色範圍將皮膚的部分標記出來。 (4) YCrCb_detect:一樣先將先將照片從RGB轉為YCrCb,方法一樣是在顏色空間設定符合膚色的範圍,以目前的程式來說,在Cr是133~173之間,而Cb則是77~127之間。 3. 結果 影片連結: 圖片成果: (1) RGB_detect (2) YCrCb_Otsu_detect (3) HSV_detector (4) YCrCb_detect 參考資料: https://www.cnblogs.com/skyfsm/p/7868877.html https://www.google.com/search?q=skin+color+detection&rlz=1C1GGGE_zh-TWTW429TW429&oq=skin+color+detection&aqs=chrome..69i57j0l5.4854j0j7&sourceid=chrome&ie=UTF-8

s1081539 作業4

圖片
主題:影像還原練習 說明: 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 1. 開發環境 Windows 10 Visual Studio 2019 C++ OpenCV 4.7.0 2. 實作 程式中有自訂幾個function,以下是幾個function的主要功能: (1) expand_img_to_optimal:對圖像做前置處理 (2) fourier_transform:進行傅立葉轉換。 (3) notch Filter:去除固定區域的噪音。 (4) highpassFilter:只保留中心頻域,去掉大部分噪音。 (5) crop_and_rearrange:對圖像進行重新排列。 (6) showMagnitudeSpectrum:對頻譜圖做歸一化,並顯示圖片。 Step1. 先以灰階模式(IMREAD_GRAYSCALE)讀入圖片並確認是否讀取成功。 Step2. 在圖像讀取成功後,用function (2)進行傅立葉轉換,在function (2)中會呼叫function (1)為轉換做前置作業,接著就可以用dft()對圖像進行轉換。 Step3. 用function(3)或function(4)產生遮罩,兩個function的差別在於function(3)只去掉小部分的含有噪音的頻域,成果會留下較多的細節,而function(4)是直接只保留中心最主要的頻域,其他部分就直接當噪音去除,出來的效果相對於function(3)來說,會比較乾淨,但也會比較模糊。 Step4. 用mulSpectrums(),將前面得到的頻域圖與步驟3產生的遮罩進行相乘得到想要的成果。 Step5. 接著呼叫function(5) 對圖像進行重新排列,再用function(6)將處理過的頻譜圖呈現。 Step6. 最後就是呼叫idft()對處理過的頻譜圖進行圖像重建的動作,然後一樣要對圖像進行歸一化再呈現。 結果 影片連結 High Pass Filter High Pass Filter的結果 Notch Filter Notch Filter的結果 參考資料 DFT: https://blog.csdn.net/gxiaoyaya/article/details/72460483 Phas...

s1081539 作業3

圖片
  主題 :  離散傅立葉轉換  說明: 撰寫傅利葉轉換程式 (Forward Fourier Transform and Inverse Fourier Transform) 將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階  256  色圖像方式呈現出,再呈現還原後圖像。   1. 開發環境 Windows 10 Visual Studio 2019 C++ OpenCV 4.7.0 2. 實作 先以灰階模式(IMREAD_GRAYSCALE)讀入圖片並確認是否讀取成功。 用getOptimalDFTSize()和copyMakeBorder()為DFT轉換做前置作業, 接著就可以用dft()對圖像進v行轉換,再用split()跟magnitude()就可以取得圖像的頻譜圖, 圖像的相位圖則是用phase()得出, 在用imshow()之前要先對頻譜圖跟相位圖做歸一化(normalize())。 重建圖像的部分則是用idft(),然後一樣要在放出圖像之前進行歸一化的 動作。 3. 結果 影片 4.參考      DFT:https://blog.csdn.net/gxiaoyaya/article/details/72460483      Phase:https://blog.csdn.net/long0801/article/details/77713797

s1081539 作業2

圖片
  主題 :  線條自畫像  說明: 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)  (a)利用 Sobel Operators 偵測並輸出邊緣成分圖  (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)   1. 開發環境 Windows 10 Visual Studio 2019 C++ OpenCV 4.7.0 2. 實作 先以灰階模式( IMREAD_GRAYSCALE )讀入圖片並確認是否讀取成功 (a) 邊緣成分圖:     1.先對圖片進行反色     2.使用 GaussianBlur() 對圖片做模糊化處理     3.分別為x方向和y方向用 Sobel() 進行邊緣檢測     4. 使用 addWeighted() 把上一步兩個方向的 檢測 結果疊加起來     5 .用 imshow() 把結果呈現在命名為" Sobel Operators"的視窗中 (b) 素描     1. 對圖片進行反色和模糊化處裡     2.將圖像的顏色減淡並進行疊加      3. 用 imshow() 把結果呈現在命名為" Final"的視窗中 3. 結果 影片 4.參考     Sobel Operators: https://blog.csdn.net/qq78442761/article/details/54315117      GaussianBlur: https://blog.csdn.net/weixin_46196863/article/details/112209430

s1081539 作業1

圖片
主題 : 圖像旋轉 (Image Rotation) 說明:撰寫一個程式將一張圖像的 (a) 整張圖像, (b) 中心內切圓區域,旋轉一個角度 ( 逆時針旋 轉 0 度至 359 度 ) :利用一個滑動條 (trackbar) 控制旋轉角度。   1. 開發環境 Windows 10 Visual Studio 2019 C++ OpenCV 4.7.0 2. 實作 先讀入圖片並確認是否讀取成功 創建 2 個 Window ,分別為 HW1(a) 跟 HW1(b) ,裡面都有各自的 trackbar 來控制旋轉角度 rotateImage(src, dst, angle) :對要旋轉的圖片 src 以指定的角度 angle 進行旋轉,並將結果存入 dst HW1(a) :直接呼叫 rotateImage() HW1(b):先用 2 層 for 迴圈將圖片分割成兩個部分 ( 圓內和圓外 ) ,接著呼叫 rotateImage() 對圓內進行旋轉,完成後再將旋轉完的結果和內切圓外的區域進行合併 3. 結果 影片 4. 參考資料 Trackbar: https://blog.csdn.net/fanjiule/article/details/81629015 Rotate: https://blog.csdn.net/qq_40622955/article/details/119180886 圖片分割: https://blog.csdn.net/xingchenbingbuyu/article/details/50719569