日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图像表示与描述

發布時間:2024/7/23 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像表示与描述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像表示與描述

目標

  • 掌握常見的基于輪廓特征的描述
  • 掌握常見的圖像區域特征描述
  • 對目標特征的測量是要利用分割結果進一步從圖像中獲取有用信息,為達到這個目的需要解決兩個關鍵問題:

    • 選用什么特征來描述目標(定性)
    • 如何精確測量這些特征(定量)

    常見的目標特征分為灰度(顏色)、幾何形狀和紋理特征等。

    簡單描述

    簡單描述符:邊界描述

    • 邊界的長度:由輪廓決定
      計算圖像內部區域是由4-連通確定,則得到的邊界是8-連通的;如果圖像內部區域是由8-連通確定的,則得到的邊界是4-連通的
    • 計算方式:把所有的邊緣點做連線,連線長度即為邊界長度(內邊界)
    • 邊界的直徑:邊界上相隔最遠2點的距離,有時也稱為圖像的主軸長度:
      Diam(B)=maxi,jD(pi,pj)Diam(B) = max_{i,j}D(p_i,p_j) Diam(B)=maxi,j?D(pi?,pj?)

      鏈碼:
    • 鏈碼用于表示由順序連接的具有指定長度的方向的直線段組成的邊界線
    • 方向基于線段的4或8連接,可編碼為0-3或0-7
    • 每段的方向使用數字編號方法進行編碼


      用這種方法就可以用一串數字組成的鏈碼表示邊界線

    鏈碼問題:

    • 由于起點的不同,造成編碼的不同
    • 由于角度的不同,造成編碼的不同
      解決:
    • 使用鏈碼的差分代替碼字本身

    循環差分鏈碼
    用相鄰鏈碼的差代替鏈碼,例如:
    4-鏈碼 10103322
    循環差分為:33133030
    計算方式為:

    1-2 = -1(3)3 - 0 = 3
    0 - 1 = -1(3)3 - 3 = 0
    1 - 0 = 12 - 3 = -1(3)
    0 - 1 = -1(3)2 - 2 = 0

    形狀數
    定義為最小循環首差鏈碼
    如上例 形狀數:03033133
    形狀數序號n的定義:形狀數表達形式中的位數。
    上例序號為8。對于封閉邊界,序號一定是偶數
    曲率
    定義弧的曲率為
    k=∣ΔαΔs∣,Δα為圓心角,Δs為弧長k = |{\frac{\Delta\alpha}{\Delta s}}|,\Delta\alpha為圓心角,\Delta s為弧長 k=ΔsΔα?ΔαΔs
    由于數字圖像是離散點,計算曲率需要采用近似:用相鄰邊界線段(描述為直線)的斜率差作為在邊界線交點處的曲率描述子。
    如圖交點a處的曲率為:K=k1?k2K = k_1 - k_2K=k1??k2?

    簡單描述符

    • 區域面積:區域包含的像素數
    • 區域重心:
      x=1A∑x,y∈Rxy=1A∑x,y∈Ryx = \frac{1}{A}\sum_{x,y\in R}x\\ y = \frac{1}{A}\sum_{x,y\in R}y x=A1?x,yR?xy=A1?x,yR?y
      區域重心可能不是整數
      簡單描述符:區域灰度特性
    • 平均灰度:g ̄=∑x,y∈Rf(x,y)\overline{g} = \sum_{x,y\in R}f(x,y)g?=x,yR?f(x,y)
    • 最大灰度,最小灰度,灰度中值
    • 灰度方差:σ2=1N∑x,y∈R(x?g ̄)2\sigma^2 = \frac{1}{N}\sum_{x,y\in R}(x-\overline{g})^2σ2=N1?x,yR?(x?g?)2
      形狀描述符
    • 形狀參數:F=∣∣B∣∣24πAF = \frac{||B||^2}{4\pi A}F=4πAB2?,B為區域邊界長度,A為區域面積,圓形F=1,其它F>1
    • 圓形性:設邊界上點到區域中心的平均距離μR=1K∑(xi,yi)∈E(R)∣∣(xi,yi)?(x ̄,y ̄)∣∣\mu_R = \frac{1}{K}\sum_{(x_i,y_i)\in E(R)}||(x_i,y_i)-(\overline x,\overline y)|| μR?=K1?(xi?,yi?)E(R)?(xi?,yi?)?(x,y?)
      距離方差
      σR2=1K∑(xi,yi)∈E(R)(∣∣(xi,yi)?(x ̄,y ̄)∣∣?μR)2\sigma_R^2 = \frac{1}{K}\sum_{(x_i,y_i)\in E(R)}(||(x_i,y_i)-(\overline x,\overline y)||-\mu_R )^2 σR2?=K1?(xi?,yi?)E(R)?((xi?,yi?)?(x,y?)?μR?)2
      則區域圓形性定義為C=μRσR2C = \frac{\mu_R}{\sigma_R^2}C=σR2?μR??
    • 形狀描述符計算實例:
      計算結果相同,形狀未必相同



      歐拉數
    • 歐拉數:E = C - H
      等于區域聯通數量減去孔的數量
    • 上述4個字符的歐拉數分別為:-1,2,1,0

    總結

  • 通過鏈碼及曲率等可以描述基于圖像輪廓的特征
  • 常見的圖像區域特征描述包括面積、形狀參數、圓形性、歐拉數等
  • 圖像表示與描述II

    目標

  • 掌握最小包圍矩形及擬合橢圓描述
  • 掌握圖像的D-P多邊形描述
  • 了解圖像的不變矩描述
  • 一般化描述

    • 最小包圍矩形(MER)
    • 離心率:最長弦A與垂直于A的最長弦B的長度比(主次軸之比)
    • 橢圓擬合
      F(a→,x→)=a→?x→=ax2+bxy+cy2+dx+ey+f=0F(\overrightarrow a,\overrightarrow x) =\overrightarrow a\cdot \overrightarrow x = ax^2 + bxy + cy^2 + dx + ey + f = 0 F(a,x)=a?x=ax2+bxy+cy2+dx+ey+f=0
    • 投影
      對區域進行水平投影和垂直投影,投影結果與對應區域大小有關
    • 多邊形擬合與D-P算法
      先在邊界上任取兩個點,然后找區域邊界線上離兩點對應直線最遠的點,不停找下去,指定符合要求。

    不變矩

    • 首先定義歸一化的不變矩
      圖像f(x,y)f(x,y)f(x,y)p+qp+qp+q階矩定義為:
      mpq=∑(xi,yi)∈RxiPyiPf(xi,yi)m_{pq} = \sum_{(x_i,y_i)\in R}x_i^Py_i^Pf(x_i,y_i) mpq?=(xi?,yi?)R?xiP?yiP?f(xi?,yi?)
    p=0,q=0面積
    p=1,q=0x方向的重心

    f(x,y)f(x,y)f(x,y)p+qp+qp+q階中心距定義為:
    μpq=∑(xi,yi)∈R(x?x ̄)p(y?y ̄)qf(xi,yi)\mu_{pq} = \sum_{(x_i,y_i)\in R}(x-\overline x)^p(y-\overline y)^qf(x_i,y_i) μpq?=(xi?,yi?)R?(x?x)p(y?y?)qf(xi?,yi?)
    其中x ̄=m10m00\overline x=\frac{m_{10}}{m_{00}}x=m00?m10??,y ̄=m01m00\overline y=\frac{m_{01}}{m_{00}}y?=m00?m01??,即前面定義的重心。
    f(x,y)f(x,y)f(x,y)的歸一化中心矩定義為:
    ηpq=μpqμpqγ,γ=p+q2+1,p+q?2\eta_{pq} = \frac{\mu_{pq}}{\mu_{pq}^\gamma },\gamma = \frac{p+q}{2}+1,p+q\geqslant 2 ηpq?=μpqγ?μpq??γ=2p+q?+1p+q?2

    • 然后定義不變矩
      常用的有七個不變矩,即對平移、旋轉和尺度變化保持不變。這些可由歸一化的二階和三階中心距得到:
      ?1=η20+η02?2=(η20?η02)2+4η112?3=(η30?3η12)2+(3η21?η03)2?4=(η30+η12)2+(η21+η03)2\phi_1 = \eta_{20} + \eta_{02} \\ \phi_2 = (\eta_{20} - \eta_{02})^2 + 4\eta_{11}^2 \\ \phi_3 = (\eta_{30}-3\eta_{12})^2 + (3\eta_{21}-\eta_{03})^2\\ \phi_4 = (\eta_{30}+\eta_{12})^2+(\eta_{21}+\eta_{03})^2 ?1?=η20?+η02??2?=(η20??η02?)2+4η112??3?=(η30??3η12?)2+(3η21??η03?)2?4?=(η30?+η12?)2+(η21?+η03?)2

    總結

    掌握圖像的最小外接矩形、投影、不變矩等特征,并了解直觀幾何意義

    圖像表示與描述實戰演練

    目標

    使用OpenCV的輪廓描述函數實現區域特征分析

    • 找到目標輪廓函數
    void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = point()); #image:單通道圖像矩陣,可以是灰度圖,但更經常是邊緣檢測算子處理過的二值圖像 #contours:定義為"vector<vector<Point>>contours",是一個輪廓列表; #hierachy:存在嵌套輪廓時,分別為第i個輪廓的后一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號; #mode:定義輪廓的檢索模式,包括CV_RETR_EXTERNAL只檢測最外圍輪廓,CV_RETR_LIST檢測所有輪廓,但不建立等級關系等; #method:包括CV_CHAIN_APPROX_SIMPLE僅保存輪廓的拐點信息,把所有輪廓拐點處的點保存入contours等; #offset:所有的輪廓信息相對于原始圖像對應的偏移量,缺省不設置。 image, contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

    相關函數(Python)

    • D-P法多邊形擬合
    approxCurve = cv2.approxPolyDP(curve, epsilon, closed[, approxCurve])
    • 計算輪廓線長度
    retval = cv2.arcLength(curve, closed)
    • 計算輪廓面積
    retval = cv2.contourArea(contour[, oriented])
    • 計算輪廓包圍矩形(水平的)
    retval = cv2.boundingRect(array)
    • 計算輪廓包圍矩形(斜的)
    retval = cv2.minAreaRect(points)
    • 計算輪廓擬合橢圓
    retval = cv2.fitElllipse(points)
    • Hu矩(不變矩)
    Hu = cv2.HuMoments(m[, hu])

    在此之前需要使用moments計算普通矩

    Retval = cv2.moments(array[, binaryImage])
    • 通過不變矩比較兩個形狀的不同。結果越小越相似
    retval = cv2.matchShapes(contour1, contour2, method, parameter)

    實例:
    要求:求出圖中每個目標的周長、面積、擬合多邊形、擬合橢圓和不變矩參數

    import cv2img = cv2.imread('C:/python/img/detect_blob2.PNG') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#首先對圖像進行閾值化 _, thr = cv2.threshold(gray, 1, 255, cv2.THRESH_BINARY) cv2.imshow("Source Image", img) cv2.imshow("Threshold image", thr)#進一步得到圖像輪廓 cnts, hier = cv2.findContours(thr, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) count = 0#建立拷貝用于圖像顯示 disp_poly = img.copy() disp_poly2 = img.copy() disp_elli = img.copy() for i in range(len(cnts)):#進行多邊形逼近,得到多邊形角點c = cnts[i]poly = cv2.approxPolyDP(c, 5, True) #中間的數值越大,允許的擬合誤差越大poly2 = cv2.approxPolyDP(c, 1, True)cv2.polylines(disp_poly, [poly], True, (255, 255, 255), 2)cv2.polylines(disp_poly2, [poly2], True, (255, 255, 255), 2)#擬合橢圓if (len(c) > 5):ellipse = cv2.fitEllipse(c)cv2.ellipse(disp_elli, ellipse, (255, 255, 255), 2)cv2.imshow("polygon fitting result", disp_poly2)#計算Hu不變性area = cv2.contourArea(c)length = cv2.arcLength(c, True)moments = cv2.moments(c)hu = cv2.HuMoments(moments)print(i+1, " : ", "length=%.1f" %length, "area=", area,"m00=%.3f, m01=%.3f, m10=%.3f, m11=%.3f" %(hu[0],hu[1],hu[2],hu[3]))#得到對應區域包圍框,并在左上角顯示序號x, y, w, h = cv2.boundingRect(c)cv2.putText(disp_poly, str(i+1), (x,y), cv2.FONT_HERSHEY_PLAIN, 0.8, (0xff, 0xff, 0xff))cv2.imshow("Polygon fitting", disp_poly) cv2.imshow("Ellipse result", disp_elli)cv2.waitKey() cv2.destroyAllWindows()

    問題

  • 完成程序,實現課程所述功能
  • 擴展:根據計算的數字特征,區分不同形狀(方形、圓形或其它)
  • 總結

    以上是生活随笔為你收集整理的图像表示与描述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。