Python與影象處理1
解析:徑向畸變(近大遠小);切向畸變(透鏡與成像平面不平行)。
2. 單反相機
解析:單反數碼相機指的是單鏡頭反光數碼相機,即Digital(數碼)、Single(單獨)、Lens(鏡頭)、Reflex(反光)的英文縮寫DSLR。目前市面上常見的單反數碼相機品牌有:尼康、佳能、賓得、索尼等。
3. 單目視覺,雙目視覺,雙目立體視覺
解析:
(1)單目視覺
(2)雙目視覺
(3)雙目立體視覺
說明:從單目視覺,雙目視覺和雙目立體視覺的2D影象中恢復3D影象。
4. glob模組
解析:glob模組是用來查詢匹配的檔案。比如,*匹配所有,?匹配一個字元。如果沒有匹配的檔案,那麼glob.glob(path)將返回一個空的列表。
5. criteria
迭代停止的模式選擇,這是一個含有三個元素的元組型數,格式為(type,max_iter,epsilon)。其中,type又有兩種選擇,如下所示:
(1)cv2.TERM_CRITERIA_EPS:精確度(誤差)滿足epsilon停止。
(2)cv2.TERM_CRITERIA_MAX_ITER:迭代次數超過max_iter停止。
(3)cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,兩者合體,任意一個滿足結束。
6. 影象型別
解析:
(1)二值影象:每個畫素不是黑就是白,其灰度值沒有中間過渡的影象。
(2)灰度影象:一個畫素只有一個值,不同的值就代表不同的灰度等級,也就呈現不同程度的灰色(0級為黑色,255級為白色)。
(3)彩色影象:每個畫素通常是由紅(R)、綠(G)、藍(B)三個分量來表示的,分量介於[0,255]之間。
(4)索引圖形
說明:一張未壓縮的1024x768大小的16位彩色影象,影象檔案位元組數 = 影象解析度 × 顏色深度 ÷ 8,即1024×768×16÷8 = 1572864Bytes = 1536KB = 1.5MB。
7. 圖層
解析:圖層就像是含有文字或圖形等元素的膠片,一張張按順序疊放在一起,組合起來形成頁面的最終效果。圖層可以將頁面上的元素精確定位。圖層中可以加入文字、圖片、表格、外掛,也可以在裡面再巢狀圖層。圖層常見型別包括:(1)普通層(2)背景層(3)文字層(4)調節層(5)效果層(6)圖形層(7)圖層組(8)圖層蒙版(9)圖層剪貼組。
8. numpy.mgrid
解析:
>>> np.mgrid[0:9,0:7]
array([[[0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1],
[2, 2, 2, 2, 2, 2, 2],
[3, 3, 3, 3, 3, 3, 3],
[4, 4, 4, 4, 4, 4, 4],
[5, 5, 5, 5, 5, 5, 5],
[6, 6, 6, 6, 6, 6, 6],
[7, 7, 7, 7, 7, 7, 7],
[8, 8, 8, 8, 8, 8, 8]],
[[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6]]])
>>> a = np.mgrid[0:9,0:7]
>>> a.size
126
>>> a.shape
(2L, 9L, 7L)
說明:a是三維矩陣,a.shape=(2L, 9L, 7L)表示2頁9行7列的三維矩陣。
9. numpy.reshape
解析:如果reshape的矩陣中有-1,那麼該維度需要推斷。
說明:Python使用del刪除變數。
10. cv2.findChessboardCorners(image, patternSize[, corners[, flags]]) → retval, corners
解析:Finds the positions of internal corners of the chessboard.
11. cv2.waitKey和cv2.destroyAllWindows
解析:
(1)cv2.waitKey():鍵盤繫結函式,共一個引數,表示等待毫秒數,將等待特定的幾毫秒,看鍵盤是否有輸入,返回值為ASCII值。如果其引數為0,則表示無限期的等待鍵盤輸入。
(2)cv2.destroyAllWindows():刪除建立的全部視窗。
12. cv2.findChessboardCorners,cv2.cornerSubPix,cv2.drawChessboardCorners
解析:
(1)cv2.findChessboardCorners:Finds the positions of internal corners of the chessboard.
eg: cv2.findChessboardCorners(image, patternSize[, corners[, flags]]) → retval, corners
(2)cv2.cornerSubPix:Refines the corner locations.
eg: cv2.cornerSubPix(image, corners, winSize, zeroZone, criteria) → None
(3)cv2.drawChessboardCorners:Renders the detected chessboard corners.
eg: cv2.drawChessboardCorners(image, patternSize, corners, patternWasFound) → None
13. 相機標定(單目標定)
解析:[針孔成像模型]根據相機畸變引數和相機內部引數對畸變影象進行修復。畸變主要有兩種:徑向畸變和切向畸變。徑向畸變矯正,如下所示:
切向畸變矯正,如下所示:
5個畸變係數,如下所示:
相機內部引數是相機特異的,它完全取決於相機自身。相機矩陣(相機內部引數),如下所示:
說明:空間景物點與其影象中的像點之間存在著一一對應的關係,它們的位置關係由攝像機成像幾何模型所決定。相機外部引數包含旋轉矩陣(R)和平移矩陣(T),它反映的是攝像機座標系與世界座標系的轉換。(攝像機固定;棋盤格固定)
14. 剛體
解析:在運動中和受力作用後,形狀和大小不變,而且內部各點的相對位置不變的物體。
15. 相機標定座標系 [13]
解析:
(1)畫素座標系
(2)影象座標系
(3)相機座標系
(4)世界座標系
說明:影象感測器分為CCD(電荷耦合器件)和CMOS(互補型金氧半導體)兩種。
16. ROI
解析:ROI(Region Of Interest)表示影象處理中的術語“感興趣區”,就是在要處理的影象中提取出的要處理的區域。
說明:3D點被稱為物件點,2D點被稱為影象點。
17. numpy陣列儲存
解析:
(1)a.tofile("filename.bin");b = numpy.fromfile("filename.bin", dtype = "")
(2)numpy.save("filename.npy", a);numpy.load("filename.npy")
(3)numpy.savetxt("filename.txt", a);b = numpy.loadtxt("filename.txt")
(4)numpy.savez("filename.npz", a);b= np.load("result.npz")
18. 邊緣檢測演算法
影象邊緣檢測運算元的4個步驟,如下所示:
(1)影象濾波:傳統邊緣檢測演算法主要是基於影象強度的一階和二階導數,但導數的計算對噪聲很敏感,因此必須使用濾波器來改善與噪聲有關的邊緣檢測器的效能。需要指出的是,大多數濾波器在降低噪聲的同時也造成了邊緣強度的損失,因此,在增強邊緣和降低噪聲之間需要一個折衷的選擇;
(2)影象增強:增強邊緣的基礎是確定影象各點鄰域強度的變化值。增強演算法可以將鄰域(或區域性)強度值有顯著變化的點突顯出來。邊緣增強一般是通過計算梯度的幅值來完成的;
(3)影象檢測:在影象中有許多點的梯度幅值比較大,而這些點在特定的應用領域中並不都是邊緣,所以應該用某種方法來確定哪些點是邊緣點。最簡單的邊緣檢測判斷依據是梯度幅值;
(4)影象定位:如果某一應用場合要求確定邊緣位置,則邊緣的位置可在子畫素解析度上來估計,邊緣的方位也可以被估計出來。
常見的邊緣檢測運算元包括:Sobel運算元,Isotropic Sobel運算元, Roberts運算元,Prewitt運算元,Laplacian運算元,Canny運算元,LoG運算元。Canny邊緣檢測運算元4個步驟,如下所示:
(1)用高斯濾波器平滑圖象;
(2)用一階偏導的有限差分來計算梯度的幅值和方向;
(3)對梯度幅值進行非極大值抑制;
(4)用雙閾值演算法檢測和連線邊緣。
19. 角點檢測演算法
解析:角點在三維場景重建、運動估計、目標跟蹤、目標識別、影象配準與匹配等計算機視覺領域起著非常重要的作用。角點檢測演算法可分為3類:基於灰度影象的角點檢測、基於二值影象的角點檢測、基於輪廓曲線的角點檢測。基於灰度影象的角點檢測又可分為基於梯度、基於模板和基於模板梯度組合3類方法。常見的基於模板的角點檢測演算法有Kitchen-Rosenfeld角點檢測演算法,Harris角點檢測演算法、KLT角點檢測演算法及SUSAN角點檢測演算法。Harris角點檢測演算法的主要思想是如果畫素周圍顯示存在多於一個方向的邊,我們認為該點為興趣點。
20. cv2.HoughCircles
解析:cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) → circles
eg: Finds circles in a grayscale image using the Hough transform.
21. cv2.cornerHarris
解析:cv2.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]]) → dst
eg: Harris edge detector.
22. 影象幾何變換
解析:圖形常見的幾何變換有縮放,仿射,透視變換,如下所示:
(1)dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
(2)dst = cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
(3)dst = cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
說明:透視變換(Perspective Transformation)是將圖片投影到一個新的視平面(Viewing Plane),也稱作投影對映(Projective Mapping)。對於透視變換,我們需要一個3x3的變換矩陣。在變換前後直線還是直線。要構建這個變換矩陣,你需要在輸入影象上找4個點,以及他們在輸出影象上對應的位置,這四個點中的任意三個都不能共線。這個變換矩陣可以由函式cv2.getPerspectiveTransform()構建,然後把這個矩陣傳給函式cv2.warpPerspective()。
23. cv2.findHomography
解析:cv2.findHomography(srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask]]]) → retval, mask。cv2.findHomography函式是求兩幅影象的單應性矩陣。在計算機視覺中,平面的單應性被定義為從一個平面到另一個平面的投影對映。因此,一個二維平面上的點對映到攝像機成像儀上的對映就是平面單應性的例子。
24. 形態學操作
解析:
(1)腐蝕:卷積核沿著影象滑動,如果與卷積核對應的原影象的所有畫素值都是1,那麼中心元素就保持原來的畫素值,否則就變為零。
(2)膨脹:卷積核沿著影象滑動,如果與卷積核對應的原影象的畫素值中有一個是1,那麼中心元素的畫素值就是1。
(3)開運算:先進行腐蝕再進行膨脹就叫做開運算。
(4)閉運算:先進行膨脹再進行腐蝕就叫做閉運算。
(5)禮帽:原始影象與進行開運算之後得到的影象的差。
(6)黑帽:進行閉運算之後得到的影象與原始影象的差。
說明:一般在去噪聲時先用腐蝕再用膨脹。
25. np.polyfit,np.poly1d,np.polyder
解析:
(1)np.polyfit和np.poly1d函式
>>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
>>> z = np.polyfit(x, y, 3)
>>> p = np.poly1d(z)
>>> p(0.5)
(2)np.polyder函式
假設多項式為,如下所示:
>>> p = np.poly1d([1,1,1,1])
>>> p2 = np.polyder(p)
>>> p2
poly1d([3, 2, 1])
說明:np.polyder多項式求導函式,返回導函式的係數。
參考文獻: