在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

手機鏡頭目標提取、缺陷檢測與圖像畸變校正

新機器視覺 ? 來源:博客園 ? 作者:LittleNyima ? 2020-08-28 13:50 ? 次閱讀

前兩天參加了北師的數學建模校賽,B題是一道圖像處理的題,于是趁機練習了一下OpenCV,現在把做的東西移植過來。

(2020.5.31補充:此方法在競賽中取得二等獎。這次的參賽論文的確存在一些問題,例如沒有對結果進行量化評估、對處理方式的具體細節敘述得不夠明確、參考文獻不夠豐富(好吧,其實沒有引用參考文獻)等。)

題目大意

給出一張生產線上拍攝的手機鏡頭的圖像(如下),要求解決三個問題:

建立模型構造出一種分割方法,可以將左右兩個鏡頭的待測區域(白色環形內區域)準確地分離出來。

建立模型構造一種檢測方法,自動地在待測區域之內將所有缺陷點找出,缺陷點為人眼可識別的白點,最小可為一個像素點。要求給出缺陷點的數學描述,并根據該描述建立檢測模型,自動確定每個缺陷點的位置和像素大小。給出右側鏡頭中按像素大小排序的最大的前五個缺陷點的位置坐標。

由于在實際拍照中鏡頭可能會在模具中抖動,所以拍攝的圖片可能并不是正對鏡頭的,此為圖像的偏心現象。比如圖中左側圖像就是正對的情況,右側就是不正對(偏心)的情況。建立模型構造一種校正方法,校正右側圖像的偏心現象。呈現校正效果,并給出第2問所求五個缺陷點校正后的位置坐標。

問題求解

問題一

這個問題是目標檢測,并且需求十分明確:提取出白色圓環中的區域的圖像。觀察圖像可以發現圖中白色的部分幾乎只有需要檢測的白色圓環,其他的白色區域基本上都是不規則圖形以及一些噪點。一種比較簡單的處理方式是直接選取一個合適的閾值二值化,把除了需要的白色圓環之外的區域全部置位黑色。不過為了魯棒性我們并沒有使用這種簡單粗暴的方式。

我們的預處理方法是二值化去除多余細節開運算去除噪點高斯濾波減小像素間梯度,完成預處理后再進行輪廓搜索。二值化采取了全局二值化,主要是在最大類間方差法(OTSU法)與三角形法兩者之間進行選取,實驗發現后者會使黑白區域邊界模糊且曲折,并且很多白色噪點(第二問要檢測)受到了干擾,因此選擇了前者作為二值化方法。開運算的卷積核為20×20矩形卷積核,進行了一次效果就很好了。高斯濾波的直徑(嚴格來說并不能叫做直徑)經驗性地確定為了5。預處理后的效果如下圖所示。

預處理結束之后直接使用OpenCV內置的findContours()尋找邊界,這個函數非常方便的一點是它可以根據輪廓之間的嵌套關系,對各個輪廓構造層次關系,函數原型為:

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

其中的必要參數為:

image:輸入的圖像

mode:輪廓的檢索模式,共有四種取值。

cv2.RETR_EXTERNAL:只檢索外輪廓。

cv2.RETR_LIST:檢索輪廓不建立層次關系。

cv2.RETR_CCOMP:建立兩層的層次關系(即父子關系),父輪廓為外輪廓,子輪廓為相應內孔。若內孔中還有內孔,則下一層的內孔作為另一個父輪廓。

cv2.RETR_TREE:對輪廓建立等級樹的層次關系。

method:輪廓的逼近方法,共有四種取值。

cv2.CHAIN_APPROX_NONE:儲存所有輪廓點,相鄰兩個點的橫縱坐標之差均不超過1。

cv2.CHAIN_APPROX_SIMPLE:壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需4個點來保存輪廓信息

cv2.CHAIN_APPROX_TC89_L1和cv2.CHAIN_APPROX_TC89_KCOS都是使用teh-Chinl chain近似算法。

對于圓環來說直接選取CCOMP模式,圖中的所有輪廓中只有圓環的外輪廓有子輪廓,從而找出所有的目標邊界。根據此邊界創建遮罩,再將遮罩與原圖做按位與即可分割出目標圖像。最后做出來的結果相當不錯。(就不放在這里了,有興趣的可以自己拿原圖跑一下代碼)

1 ''' 2 * detection.py 3 Runtime environment: 4 python = 3.7.4 5 opencv-python = 4.1.1.26 6 numpy = 1.17.2 7 ''' 8 9 from cv2 import imread, IMREAD_GRAYSCALE, threshold, THRESH_BINARY, THRESH_OTSU,10 getStructuringElement, MORPH_RECT, erode, dilate, GaussianBlur, findContours,11 RETR_CCOMP, CHAIN_APPROX_SIMPLE, IMREAD_COLOR, drawContours, bitwise_and,12 imwrite13 from numpy import zeros, shape, uint814 15 def detection():16 original = imread('Original.png', IMREAD_GRAYSCALE)17 _, binary = threshold(original, 0, 255, THRESH_BINARY | THRESH_OTSU)18 imwrite('problem1_binary.png', binary)19 kernel = getStructuringElement(MORPH_RECT, (20, 20))20 eroded = erode(binary, kernel)21 dilated = dilate(eroded, kernel)22 blur = GaussianBlur(dilated, (5, 5), 0)23 imwrite('problem1_preprocess.png', blur)24 contours, hierarchies = findContours(blur, RETR_CCOMP, CHAIN_APPROX_SIMPLE)25 chromatic = imread('Original.png', IMREAD_COLOR)26 drawContours(chromatic, contours, -1, (0, 0, 255), 10)27 imwrite('problem1_contours.png', chromatic)28 chromatic = imread('Original.png', IMREAD_COLOR)29 for hierarchy in hierarchies[0, :]:30 if hierarchy[2] != -1:31 drawContours(chromatic, contours, hierarchy[2], (255, 0, 255), 15)32 imwrite('problem1_target_contours.png', chromatic)33 chromatic = imread('Original.png', IMREAD_COLOR)34 count = 035 for hierarchy in hierarchies[0, :]:36 if hierarchy[2] != -1:37 mask = zeros(shape(chromatic), dtype = uint8)38 drawContours(mask, contours, hierarchy[2], (255, 255, 255), -1)39 imwrite('mask' + str(count) + '.png', mask)40 imwrite('detection' + str(count) + '.png', bitwise_and(chromatic, mask))41 count += 142 43 if __name__ == '__main__':44 detection()

問題二

檢測缺陷點還要計算大小,這很明顯是一個圖搜索問題。把問題一預處理第一步,也就是二值化得到的圖像與遮罩疊加,所需要搜索的缺陷點就都顯現出來了。需要做的只是遍歷圖像中所有點,然后對每個點進行廣度優先搜索就可以了。這個問題也比較順利地解決了,唯一的缺點是遍歷廣搜運行起來有一點慢,要運行數十秒才能得到結果。

1 ''' 2 Runtime environment: 3 python = 3.7.4 4 opencv-python = 4.1.1.26 5 numpy = 1.17.2 6 ''' 7 8 from cv2 import imread, IMREAD_GRAYSCALE, threshold, THRESH_BINARY, THRESH_OTSU, 9 imwrite, bitwise_and, IMREAD_COLOR, circle10 from numpy import shape, zeros, uint811 12 def findDefect():13 original = imread('Original.png', IMREAD_GRAYSCALE)14 _, binary = threshold(original, 0, 255, THRESH_BINARY | THRESH_OTSU)15 mask = imread('mask0.png', IMREAD_GRAYSCALE)16 target = bitwise_and(binary, mask)17 imwrite('problem2_target.png', target)18 flag = zeros(shape(target), dtype = uint8)19 defects = []20 for i in range(shape(target)[0]):21 for j in range(shape(target)[1]):22 if target[i][j] == 255 and flag[i][j] == 0:23 queue = []24 head, tail= 0, 025 x, y = i, j26 queue.append(None)27 queue[head] = (x, y)28 flag[x][y] = 129 head += 130 while head > tail:31 if x > 0 and target[x - 1][y] == 255 and flag[x - 1][y] == 0:32 queue.append(None)33 queue[head] = (x - 1, y)34 flag[x - 1][y] = 135 head += 136 if y > 0 and target[x][y - 1] == 255 and flag[x][y - 1] == 0:37 queue.append(None)38 queue[head] = (x, y - 1)39 flag[x][y - 1] = 140 head += 141 if x < shape(target)[0] - 1 and target[x + 1][y] == 255 and flag[x + 1][y] == 0:42 queue.append(None)43 queue[head] = (x + 1, y)44 flag[x + 1][y] = 145 head += 146 if y < shape(target)[1] - 1 and target[x][y + 1] == 255 and flag[x][y + 1] == 0:47 queue.append(None)48 queue[head] = (x, y + 1)49 flag[x][y + 1] = 150 head += 151 (x, y) = queue[tail]52 tail = tail + 153 size = len(queue)54 xsum, ysum = 0, 055 for (x, y) in queue:56 xsum += x57 ysum += y58 defects.append((size, xsum // size, ysum // size))59 defects.sort()60 print(defects[::-1], len(defects))61 print(defects[-5:])62 return defects[-5:]63 64 def visualize(defects):65 original = imread('Original.png', IMREAD_COLOR)66 for defect in defects:67 circle(original, (defect[2], defect[1]), 10, (0, 0, 255), -1)68 imwrite('defects.png', original)69 70 if __name__ == '__main__':71 defects = findDefect()72 visualize(defects)

最后得到了116個缺陷點,雖然大多數都只有1~2個像素但不得不吐槽這個鏡頭的加工技術確實不太行。

問題三

這個問題是對鏡頭在模具內抖動造成的偏心畸變進行修正,再重新計算缺陷點坐標。修正畸變是本次各個問題中最為棘手的一個部分。查找了一下資料,偏心畸變是由于圖像中目標的光軸與攝像機的光軸不重合造成的,這也是偏心畸變在英文中被稱為decentering distortion的原因。在本問題中,大概是這樣:

如果把鏡頭內表面看做圓錐面的話,偏心畸變的產生原因就是這個圓錐稍微“倒下”了一點。想要從幾何上對齊進行修正,就要將這個圓錐“扶正”,具體方式是將圓錐面上的每個點都映射到另一個正立的圓錐上,使得其在母線上的位置比例關系不變。

如上圖,這是從圓錐的底面看向頂點的視圖。目標是將紅色的圓錐母線映射到藍色的圓錐母線上,在左圖看來,就是對于圓O內任意一點P,連接O'P并延長交圓O于Q,連接OQ,在OQ上找到一點P'使得O'P/O'Q=OP'/OQ,P'即為所求。具體的公式推導就不推了,主要過程就是先將原坐標系中的坐標映射到這個圓O的坐標系中,得到目標點的坐標后再映射回去(因為線性代數很多都忘記了所以數學推導十分受苦QAQ)。最后的修正效果如下:

左圖是修正前的原圖,右圖是修正后的圖像。雖然直觀上看并沒有太大變化,但仔細觀察中間的深色原點以及深灰色圓形陰影的位置,就可以看出整幅圖像得到了一個從左下到右上的校正。最后的總體效果還是比較令人滿意的,在新的圖像上重復問題一、二的算法,問題即得解。

問題三的代碼如下,主要有兩部分,第一部分是求中間小的深色圓形陰影位置的代碼,第二部分是進行畸變校正的代碼(實現比較暴力,相應地運行效率也比較低)。

1 ''' 2 * locating.py 3 Runtime environment: 4 python = 3.7.4 5 opencv-python = 4.1.1.26 6 numpy = 1.17.2 7 ''' 8 9 from cv2 import imread, IMREAD_GRAYSCALE, threshold, THRESH_OTSU, THRESH_BINARY,10 imshow, waitKey, imwrite, THRESH_TRIANGLE, adaptiveThreshold, ADAPTIVE_THRESH_MEAN_C,11 ADAPTIVE_THRESH_GAUSSIAN_C, HoughCircles, HOUGH_GRADIENT, circle,12 getStructuringElement, MORPH_RECT, erode, dilate, medianBlur, GaussianBlur,13 Canny, findContours, RETR_CCOMP, CHAIN_APPROX_SIMPLE, drawContours,14 IMREAD_COLOR, RETR_TREE, minEnclosingCircle15 from numpy import uint1616 17 if __name__ == '__main__':18 original = imread('detection0.png', IMREAD_GRAYSCALE) # read original image as grayscale image19 kernel = getStructuringElement(MORPH_RECT, (20, 20))20 eroded = erode(original, kernel)21 dilated = dilate(eroded, kernel)22 dilated = dilate(dilated, kernel)23 eroded = erode(dilated, kernel)24 blur = GaussianBlur(eroded, (5, 5), 0)25 original = blur26 binary = adaptiveThreshold(original, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 99, 2)27 imwrite('adaptive_mean.png', binary) # save image adaptive mean method(loc.)28 origin = imread('adaptive_mean.png', IMREAD_GRAYSCALE)29 kernel = getStructuringElement(MORPH_RECT, (40, 40))30 eroded = erode(origin, kernel)31 dilated = dilate(eroded, kernel)32 blur = GaussianBlur(dilated, (5, 5), 0)33 origin = blur34 contours, hierarchies = findContours(origin, RETR_TREE, CHAIN_APPROX_SIMPLE)35 print(hierarchies)36 chromatic = imread('Original.png', IMREAD_COLOR)37 for i in range(len(hierarchies[0])):38 if hierarchies[0][i][2] == -1:39 break40 length = len(contours[i])41 (x0, y0), r = minEnclosingCircle(contours[i])42 sum = [0, 0]43 for k in contours[i]:44 sum = sum + k45 print(sum // length)46 x, y = tuple(sum[0] // length)47 circle(chromatic, (int(x0), int(y0)), 5, (0, 255, 0), -1)48 circle(chromatic, (int(x0), int(y0)), int(r), (0, 255, 0), 10)49 X, Y, R = (2585, 1270, 433)50 circle(chromatic, (X, Y), 5, (0, 0, 255), -1)51 circle(chromatic, (X, Y), R, (0, 0, 255), 10)52 print(int(x0), int(y0), int(r))53 print(X, Y, R)54 imwrite('contours.png', chromatic)

1 """ 2 * calibrate.py 3 Runtime environment: 4 python = 3.7.4 5 opencv-python = 4.1.1.26 6 numpy = 1.17.2 7 """ 8 9 from math import sqrt10 from cv2 import imread, IMREAD_GRAYSCALE, imwrite, medianBlur11 from numpy import shape12 13 14 def dist(p1, p2):15 r = (float(p1[0] - p2[0]) ** 2 + float(p1[1] - p2[1]) ** 2) ** 0.516 return r17 18 19 def calibrate():20 x, y, r = 2567.0, 1289.0, 63.021 x0, y0, r0 = 2585.0, 1270.0, 433.022 dist0 = dist((x, y), (x0, y0))23 input_img = imread('Original.png', IMREAD_GRAYSCALE)24 output = imread('Original.png', IMREAD_GRAYSCALE)25 tan_theta = float(y - y0) / float(x0 - x)26 sin_theta = tan_theta / sqrt(1 + tan_theta * tan_theta)27 cos_theta = 1 / sqrt(1 + tan_theta * tan_theta)28 sin_theta, cos_theta = sin_theta.real, cos_theta.real29 for i in range(shape(input_img)[1]):30 for j in range(shape(input_img)[0]):31 original = (i, j)32 if dist(original, (x0, y0)) < r0:33 neo = (cos_theta * float(i - x0) - sin_theta * float(j - y0),34 -sin_theta * float(i - x0) - cos_theta * float(j - y0))35 a = float(neo[1]) ** 2 + (float(neo[0]) + dist0) ** 236 b = -2.0 * float(neo[1]) * dist0 * (float(neo[0]) + dist0)37 c = float(neo[1]) ** 2 * (dist0 ** 2 - r0 ** 2)38 delta = b ** 2 - 4 * a * c39 if delta < 0 or a == 0 or float(neo[1]) == 0:40 continue41 yr = (sqrt(delta) - b) / (2 * a)42 if (yr * float(neo[1])) < 0:43 yr = (0 - b - sqrt(delta)) / (2 * a)44 xr = ((float(neo[0]) + dist0) * yr / float(neo[1])) - dist045 x2, y2 = xr / yr * float(neo[1]), float(neo[1])46 real = (cos_theta * x2 - sin_theta * y2 + x0, -sin_theta * x2 - cos_theta * y2 + y0)47 output[int(real[1])][int(real[0])] = input_img[int(original[1])][int(original[0])]48 imwrite('problem3_after_mapping.png', output)49 medianed = medianBlur(output, 3)50 imwrite('Result3.png', medianed)51 52 53 if __name__ == '__main__':54 calibrate()

總結

雖然之前處理過一些圖像處理問題但從來沒有像這次一樣完整地做一次題目,也沒有深入地了解過各個運算的內在原理。這次的圖像處理問題前兩個比較基礎,最后一個比較有挑戰性,感覺對于學習OpenCV還是很有幫助的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像
    +關注

    關注

    2

    文章

    1085

    瀏覽量

    40479
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62666
  • OpenCV
    +關注

    關注

    31

    文章

    635

    瀏覽量

    41368

原文標題:OpenCV實戰 | 手機鏡頭目標提取、缺陷檢測與圖像畸變校正

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FLIR推出廣角檢測應用雙視場鏡頭

    想要輕松搞定大型目標的檢查?全新FLIR FlexView 42°/24°鏡頭是您的理想之選!這款鏡頭能在確保目標圖像質量的前提下,讓您獲得更加出色的
    的頭像 發表于 10-24 13:48 ?263次閱讀

    基于DCC和張氏標定的相機鏡頭畸變校正

    電子發燒友網站提供《基于DCC和張氏標定的相機鏡頭畸變校正.pdf》資料免費下載
    發表于 08-29 10:37 ?0次下載
    基于DCC和張氏標定的相機<b class='flag-5'>鏡頭</b><b class='flag-5'>畸變</b><b class='flag-5'>校正</b>

    圖像分割與目標檢測的區別是什么

    圖像分割與目標檢測是計算機視覺領域的兩個重要任務,它們在許多應用場景中都發揮著關鍵作用。然而,盡管它們在某些方面有相似之處,但它們的目標、方法和應用場景有很大的不同。本文將介紹
    的頭像 發表于 07-17 09:53 ?1346次閱讀

    目標檢測圖像識別的區別在哪

    目標檢測圖像識別是計算機視覺領域中的兩個重要研究方向,它們在實際應用中有著廣泛的應用,如自動駕駛、智能監控、醫療診斷等。盡管它們在某些方面有相似之處,但它們之間存在一些關鍵的區別。 基本概念
    的頭像 發表于 07-17 09:51 ?907次閱讀

    目標檢測與識別技術有哪些

    目標檢測與識別技術是計算機視覺領域的重要研究方向,廣泛應用于安全監控、自動駕駛、醫療診斷、工業自動化等領域。 目標檢測與識別技術的基本概念 目標
    的頭像 發表于 07-17 09:40 ?619次閱讀

    目標檢測與識別技術的關系是什么

    任務是在圖像或視頻中快速準確地定位出感興趣的目標,并給出目標的位置信息。目標檢測技術通常包括候選區域提取
    的頭像 發表于 07-17 09:38 ?618次閱讀

    圖像檢測與識別技術的關系

    檢測技術是指利用計算機視覺技術,對圖像中的特定目標進行定位和識別的過程。它通常包括圖像預處理、特征提取
    的頭像 發表于 07-03 14:43 ?657次閱讀

    labview圖像畸變矯正問題

    求助各位大佬,如下圖,圖像畸變矯正需要有個矯正模板template.png,怎么樣可以把這個“template.png”的矯正信息全部變成常量放入到VI里面。后面vi就不需要調用這個地址的圖片了
    發表于 06-20 22:16

    工業鏡頭中常說的畸變、遠心鏡頭及遠心度

    淺談工業鏡頭中常說的畸變、遠心鏡頭及遠心度
    的頭像 發表于 05-22 11:00 ?2470次閱讀
    工業<b class='flag-5'>鏡頭</b>中常說的<b class='flag-5'>畸變</b>、遠心<b class='flag-5'>鏡頭</b>及遠心度

    機器視覺的鏡頭圖像采集卡硬件技術分析

    光學鏡頭目前有監控級和工業級兩種,監控級鏡頭主要適用于圖像質量不高、價格較低的應用場合;工業級鏡頭由于圖像質量好、
    發表于 04-07 14:23 ?753次閱讀
    機器視覺的<b class='flag-5'>鏡頭</b>和<b class='flag-5'>圖像</b>采集卡硬件技術分析

    攝像頭各標定參數的作用

    車載攝像頭的畸變矩陣描述了攝像頭鏡頭造成的畸變,主要包括徑向畸變和切向畸變等參數。畸變矩陣的作用
    的頭像 發表于 03-21 11:11 ?925次閱讀
    攝像頭各標定參數的作用

    一目了然:機器視覺缺陷識別方法

    ,采集產品表面的圖像數據,通常使用相機或傳感器來獲取高分辨率的圖像。對圖像進行預處理,包括去噪、增強對比度、邊緣檢測等操作,以減少干擾并突出缺陷
    的頭像 發表于 03-18 17:54 ?1171次閱讀
    一目了然:機器視覺<b class='flag-5'>缺陷</b>識別方法

    基于深度學習的芯片缺陷檢測梳理分析

    雖然表面缺陷檢測技術已經不斷從學術研究走向成熟的工業應用,但是依然有一些需要解決的問題?;谝陨戏治隹梢园l現,由于芯片表面缺陷的獨特性質,通用目標
    發表于 02-25 14:30 ?1541次閱讀
    基于深度學習的芯片<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>梳理分析

    視覺檢測設備的分類

    、質量控制、醫療影像、安防監控、無人駕駛等。視覺檢測設備的主要功能包括圖像采集、圖像處理、目標檢測、特征
    的頭像 發表于 02-21 09:41 ?1397次閱讀
    視覺<b class='flag-5'>檢測</b>設備的分類

    描繪未知:數據缺乏場景的缺陷檢測方案

    Neuro-T 視覺平臺 克服了數據缺乏狀況的困難,通過零代碼設置 GAN模型 和 無監督學習模型 ,輕松實現缺陷圖像的標注、繪制和導出。 工業應用中存在較多的缺陷檢測需求。針對
    的頭像 發表于 01-25 10:46 ?578次閱讀
    描繪未知:數據缺乏場景的<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>方案
    主站蜘蛛池模板: 人人骚| 91久操| 欧美一级片免费观看| 天天爱天天做天天干| 欧美不卡视频在线观看| 一区二区网站| 欧美激情二区三区| 国产成人无精品久久久久国语| 久久国产热视频| 午夜两性色视频免费网站| 色婷五月| 久久久久久久网站| 日本三级免费观看| 男人的天堂在线精品视频| 狠色网| 亚洲第一香蕉视频| 免费一级在线| 色就操| 国产午夜不卡在线观看视频666| 视频在线免费观看| 免看一级a毛片一片成人不卡| 亚洲天堂婷婷| 青娱乐伊人| 日韩欧美成人乱码一在线| 美女网站色视频| 在线免费看黄的网站| 日日干夜夜欢| 黄色网在线| 亚洲va中文字幕无码| 欧美一级视频免费看| 成 人 免费观看网站| 久久最新精品| 日本一卡二卡3卡四卡网站精品| 性欧美欧美之巨大69| 免费网站毛片| 午夜影视剧场| 天堂在线最新资源| 在线欧美三级| 99久久精品国产免费| 欧美成人三级伦在线观看| brazzersvideosexhd欧美高清 |