2020年4月7日 星期二

1061646 影像處理作業2

一、作業要求
         撰寫一個程式,讀取作業所附 2 張測試圖片,(1)設計一個二值化方法將其轉變成黑白 圖
         像後,(2)繪出 QR code 黑色模組的外框(可利用 Sobel Operators 偵測即可)。

二、使用環境
       1. Visual Studio 2019
       2. OpenCV 4.2.0
       3. 程式語言: C++

三、實作方法
       1. 使用imread("xxx.jpg",0)將圖片讀取灰階形式
       2. 以xxx.at <uchar>(i,j)取出灰階圖像中i列j行的點,並設定像素臨界值107,超過107的點
           都改成255,反之改成0,完成二值化
       3.再用Mat::zeros(xxx.size(), CV_16SC1)建立3個16位元有符號的單通道圖像(分別為偵測
          邊緣後的水平向、垂直向及兩者疊加的圖像)
       4. uchar* M_1 = xxx.data; 代表指向矩陣的第一個位址,xxx.step;代表圖像一列(row)的長度
           (byte為1單位),利用兩者在影像上作convolution
       5. Sobel operator 公式如下:
          Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)
                 +(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)
                 +(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

         Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)
               +0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)
               +(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

         G = |Gx|+|Gy|
      6. addWeighted(Gx, 0.5, Gy, 0.5, 0, G);  做影像疊加,達到G = |Gx|+|Gy|
      7. convertScaleAbs(image_1CB, imageCB); 將16點陣圖片轉化成為8點陣圖形進行顯示
      8. imwrite();儲存圖片imshow(); 顯示圖片

四、作業要求


左圖:二值化
右圖:邊緣偵測

左圖:二值化
右圖:邊緣偵測

沒有留言:

張貼留言