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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

摄像机高精度标定的一些方法

發(fā)布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 摄像机高精度标定的一些方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

攝像機(jī)標(biāo)定從標(biāo)定板類型可以分為:一維標(biāo)定物,二維標(biāo)定物和三維標(biāo)定物(哈哈哈)

1 一維標(biāo)定物

一維標(biāo)定物標(biāo)定算法是利用攝像機(jī)投影過程中的交比不變性的原理,常用來標(biāo)定攝像機(jī)陣列(多個攝像機(jī))。具體原理可參考:基于一維標(biāo)定物的多攝像機(jī)標(biāo)定。一維標(biāo)定物見下圖所示,一個直桿上有3個點(diǎn),三個點(diǎn)之間的距離需要實(shí)現(xiàn)精確測量。在標(biāo)定過程中,只需要在各個攝像機(jī)的視場空間不斷揮動標(biāo)定桿,就可以精確標(biāo)定攝像機(jī)的內(nèi)外參數(shù)。一維標(biāo)定物在多攝像機(jī)標(biāo)定中使用起來非常靈活方便,非常建議在該種場景下使用。
(在這里特別感謝一下吳福朝,張廣軍等人在早期對傳統(tǒng)的計(jì)算機(jī)視覺(也可以叫幾何視覺吧)的貢獻(xiàn),我是從計(jì)算機(jī)視覺中的數(shù)學(xué)方法(吳福朝),機(jī)器視覺(張廣軍),計(jì)算機(jī)視覺中的多視圖幾何(韋穗翻譯)這三本書入門機(jī)器視覺的。)

一維標(biāo)定物,圖片來自“基于一維標(biāo)定物的多攝像機(jī)標(biāo)定”

2 三維標(biāo)定物

三維標(biāo)定物主要利用已知的三維標(biāo)志點(diǎn)坐標(biāo)和圖像點(diǎn)標(biāo)定攝像機(jī)內(nèi)外參數(shù),原理類似與二維標(biāo)定物的標(biāo)定方法。三維標(biāo)定物制作起來成本比較高,在張正友標(biāo)定法之前應(yīng)用的比較廣泛,現(xiàn)在基本上已經(jīng)不在使用了。

3 二維標(biāo)定物

二維標(biāo)定物是現(xiàn)在主流的攝像機(jī)標(biāo)定方法,主要優(yōu)點(diǎn)是,標(biāo)定板成本較低,標(biāo)定操作簡單方便,標(biāo)定精度高(好處多多)。二維標(biāo)定物是從張正友標(biāo)定法出來之后流行起來的。大部分的標(biāo)定算法都是two stage:1是解方程,就是通過幾何約束求解未知參數(shù);2,迭代優(yōu)化,基于1中求解的參數(shù),建立目標(biāo)函數(shù),通過迭代優(yōu)化的方式增加參數(shù)的精度。只有經(jīng)過這兩部得到的標(biāo)定參數(shù)才是最優(yōu)。張正友標(biāo)定法也是按照這兩步進(jìn)行,下面也會講解相機(jī)和激光間的標(biāo)定也是這樣進(jìn)行的。當(dāng)然,在一些高精度三維測量中(三維結(jié)構(gòu)光掃描儀等),還會加入其它的優(yōu)化手段。

3.1 標(biāo)定方法

二維標(biāo)定物的攝像機(jī)標(biāo)定方法基本上都是用張正友標(biāo)定法,詳細(xì)原理現(xiàn)在網(wǎng)上已經(jīng)有太多了這里不展開敘述,簡單來說可以分成以下步驟:

  • 提取標(biāo)定圖像上的標(biāo)志點(diǎn),聯(lián)合已知的標(biāo)定板三維點(diǎn)坐標(biāo),通過DLT方法,求解單應(yīng)矩陣H。
  • 單應(yīng)矩陣中,利用旋轉(zhuǎn)矩陣的正交性,增加約束方程,求解相機(jī)的內(nèi)部參數(shù)A(相機(jī)的焦距和中心點(diǎn)坐標(biāo))
  • 通過已知的內(nèi)部參數(shù)和H矩陣,求解外部參數(shù)(R,t)。需要注意的是這里的外部參數(shù)是指相機(jī)坐標(biāo)系和標(biāo)定板坐標(biāo)系之間的旋轉(zhuǎn)平移變換
  • 建立相機(jī)畸變模型(radtan)
  • 建立目標(biāo)函數(shù),優(yōu)化標(biāo)定參數(shù)(A,R,t,畸變參數(shù)),目標(biāo)函數(shù)是反投影殘差參數(shù)。這一步也就是paper中所說的最大似然估計(jì)。
  • 如果是雙目標(biāo)定的情況,在兩個相機(jī)分別進(jìn)行上述標(biāo)定后,求解兩個相機(jī)之間的外部參數(shù)(R,t)。
  • 建立目標(biāo)函數(shù),優(yōu)化內(nèi)外參。
  • 需要注意的是:

  • 針對雙目攝像機(jī)標(biāo)定,雖然opencv里面直接有雙目標(biāo)定函數(shù),但是通常意義下,最好先使用單目標(biāo)定分別標(biāo)定左右相機(jī),然后使用雙目標(biāo)定函數(shù)標(biāo)定外參。
  • 畸變參數(shù)問題,針對小視角相機(jī),畸變比較小,可以先忽略畸變參數(shù)求解相機(jī)內(nèi)參,然后通過優(yōu)化方式求解畸變參數(shù)。但是對于魚眼相機(jī),畸變比較大,是不是不能這么做。需要先估計(jì)畸變參數(shù),或者是畸變參數(shù)和相機(jī)內(nèi)參一起估計(jì)。例如opencv中的equidistant模型標(biāo)定。這一塊需要再繼續(xù)研究一下。
  • 3.2 標(biāo)定板類型

    事先說明,在高精度相機(jī)標(biāo)定中,標(biāo)定板的選擇至關(guān)重要,標(biāo)定板的精度也非常的高,在高精度三維重建和測量領(lǐng)域,使用的相機(jī)和鏡頭都是工業(yè)級別的。但是針對VSLAM行業(yè),使用的相機(jī)都是相機(jī)模組,標(biāo)定精度要求不是那么高,使用opencv,kalibr等標(biāo)定代碼已經(jīng)可以完全滿足標(biāo)定需求。
    目前二維標(biāo)定板可以分為兩種類型:角點(diǎn)標(biāo)定板和圓形標(biāo)定板。如下圖所示,其中角點(diǎn)標(biāo)定板有我們常用的棋盤格(chessboard)標(biāo)定板(下圖左上),kalibr標(biāo)定所使用二維標(biāo)識碼(Apriltag)標(biāo)定板(下圖右上);圓形標(biāo)定板可以自己設(shè)計(jì)(如下圖左下,歡迎拍磚),還可以使用halcon中自帶的標(biāo)定板(下圖右下)。值得一提的是,halcon工具在相機(jī)標(biāo)定領(lǐng)域已經(jīng)遙遙領(lǐng)先。現(xiàn)在很多做三維測量的公司都在使用這個機(jī)器視覺庫。

    在特征點(diǎn)提取精度方面圓形標(biāo)定的提取精度高于棋盤格類型的平面標(biāo)定板。這也是為什么在高精度三維測量,三維重建領(lǐng)域,常常使用圓形標(biāo)定板的原因。這里值得注意的是,由于相機(jī)幾何投影的原因,標(biāo)定板投影到圖像上,圓形會變成橢圓。因此我們在圖像上是需要提取橢圓的圓心的。因此提取橢圓圓心大致分為一下過程:

  • 提取圓形輪廓,將每個橢圓劃分開。可以利用opencv輪廓提取函數(shù)完成
  • 利用邊緣檢測算子提取橢圓的邊緣
  • 亞像素邊緣提取(二次曲線擬合法,灰度矩法等)
  • 橢圓擬合(hough變換,最小二乘法),得到橢圓圓心
    指的注意的是,亞像素邊緣提取對圓心提取的精度至關(guān)重要。但由于圖像噪聲的關(guān)系,邊緣提取方法,橢圓擬合方法需要斟酌使用。
  • 在上圖的圓形標(biāo)定中,我們在中間設(shè)置了不對稱(既不是軸對稱,也不是中心對稱)的五個大圓,有兩個目的:一是無論我們怎么擺設(shè)標(biāo)定板,都不會改變圓的排序序號,即在相機(jī)標(biāo)定時,在標(biāo)定板上建立世界坐標(biāo)系是唯一的,這在一定程度會提升相機(jī)標(biāo)定的精度。二是在標(biāo)定時,由于相機(jī)視角原因,即使沒有將標(biāo)定板拍攝完全,也可以根據(jù)中間五個大圓,將圖像上的圓正確排序。
    在使用圓形標(biāo)定板的時候,還需要特別注意一個問題,就是所謂的偏心差(也叫透視偏差),英文名:perspective bias,即標(biāo)定板上的圓心投影到圖像上,投影點(diǎn)并不是圖像上的橢圓圓心(是不是有很多問號???)。如下圖所示,有一圓半徑為r,圓心C,投影到圖像平面IP上,圓心的真正投影點(diǎn)應(yīng)該為C’,然而由于透視偏差的存在,我們通過圖像橢圓擬合得到的圓心為B’,投影偏差就是B’C’。需要注意,透視偏差是視覺幾何客觀存在的差異,并不是圖像提取等噪聲產(chǎn)生的誤差,因此這個偏差叫做bias,而不是error。是不是有點(diǎn)類似與IMU bias。如何解決該bias,2000年左右就已經(jīng)有人把該個圓形透視偏差模型用幾何公式的方式完全建模出來, 我們直接可以使用[1]。關(guān)于這個偏差這里列舉一些文獻(xiàn),有興趣的同學(xué)可以詳細(xì)研究一下 [1] [2][3][4][5]。

    偏心差示意圖,圖片來自“圓形標(biāo)志投影偏心差補(bǔ)償算法[2]”

    3.3 提升標(biāo)定精度

    這里再次強(qiáng)調(diào),如果是在SLAM等環(huán)境下標(biāo)定相機(jī),我們常用的opencv,matlab標(biāo)定方法就已經(jīng)可以滿足標(biāo)定精度的需求。因?yàn)镾LAM的定位精度是厘米級別(有做的更好精度的,歡迎拍磚)的。但是對于高精度的三維重建,重建精度達(dá)到0.02mm,甚至于微米級別的,那么提升標(biāo)定精度就是必須的。在高精度三維重建領(lǐng)域,例如三維掃描儀,主要是主動打結(jié)構(gòu)光的方式,通過解碼(通常是解相位),利用三角測量原理重建三維模型的。因此相機(jī)的標(biāo)定參數(shù)和圖像的匹配精度是影響三維重建的主要因素。這里主要是對如何提升相機(jī)標(biāo)定參數(shù),談一些自己的想法。
    除了上面所提的使用圓形標(biāo)定板,并且需要進(jìn)行圓心透視偏差的補(bǔ)償外,還有一些其它方法:

  • 提高標(biāo)定板的精度,我們所使用的標(biāo)定板精度是否真正精確,這需要第三方高精度測量設(shè)備測試。這里有兩個方面需要注意,一是標(biāo)定板上圓與圓之間的距離是否準(zhǔn)確;二是我們所使用的標(biāo)定的平面性如何,一般我們使用的標(biāo)定板有鋁制的,陶瓷的,玻璃的。隨著加工工藝的提升,標(biāo)定板的精度越來越好,但是標(biāo)定板的幾何參數(shù)我們需要進(jìn)一步精確。一般來講,標(biāo)定板的精度比我們的三維重建精度要高一個數(shù)量級。因此,在三維測量領(lǐng)域,高精度標(biāo)定板的成本是很高的。
  • 算法優(yōu)化。在進(jìn)行單目和雙目標(biāo)定后,我們需要再加一部迭代優(yōu)化方法,目標(biāo)函數(shù)仍然是反投影殘差,優(yōu)化變量依舊是相機(jī)的內(nèi)外參數(shù),但是這里我們使用的標(biāo)定板3D點(diǎn)坐標(biāo)是更精確的坐標(biāo)(因?yàn)閺埵蠘?biāo)定法的原因,標(biāo)定板是平面的,但是由于制作誤差,其實(shí)并不是平的),這里我們在優(yōu)化的時候可以使用真實(shí)的3D點(diǎn),并且加入透視偏差模型,得到更加精確的參數(shù)。這方面有需求的話,后面專門寫個博客。
  • 在標(biāo)定的過程中,擺放標(biāo)定板的位置也至關(guān)重要。一般來說,對于小視角相機(jī),擺放7-10步就可以精確標(biāo)定出相機(jī)的內(nèi)參,分別是:標(biāo)準(zhǔn)正方,向下傾斜,向上傾斜,向左傾斜,向右傾斜, 遠(yuǎn)離攝像頭,靠近攝像頭.,如果視野大,在遠(yuǎn)離攝像頭的位置上也擺設(shè)幾步標(biāo)定板。這也是有人做過大量實(shí)驗(yàn)驗(yàn)證過的。當(dāng)然針對魚眼相機(jī)等大視角相機(jī),需要擺放更多的位置。其實(shí)在我們使用kalibr標(biāo)定工具標(biāo)定時,很多圖像是冗余的,不知道kalibr里面有沒有挑選圖像的步驟。
  • 圓形標(biāo)定板,盡量不要使用大圓。比如上圖的第二排第一個標(biāo)定板,為了標(biāo)定板圓心排序設(shè)計(jì)了5個大圓,但在實(shí)際應(yīng)用中會把5個大圓剔除掉。以前自己做實(shí)驗(yàn)的時候,發(fā)現(xiàn)大圓的圓心提取會拉低整個標(biāo)定精度。所以halcon設(shè)計(jì)的標(biāo)定板挺好的。大圓圓心拉低標(biāo)定精度的原因,可能是因?yàn)槲乙郧皼]有做橢圓偏心矯正吧。這一條寫在這里,有待相關(guān)同學(xué)進(jìn)一步驗(yàn)證。
  • 3.4 相機(jī)標(biāo)定評價標(biāo)準(zhǔn)

    一般,評價攝像機(jī)標(biāo)定精度是使用反投影殘差的。在高精度相機(jī)標(biāo)定中,反投影殘差可以達(dá)到0.02pixel左右的精度。在VSLAM領(lǐng)域,相機(jī)標(biāo)定反投影殘差精度在0.5pixel就可以了,甚至對于fisheye相機(jī),1-2pixel也可以接受。當(dāng)然對fisheye相機(jī),用到了其它的相機(jī)模型(Omni等),這個在后面專門出個博客,介紹相機(jī)模型介紹。
    但是使用反投影殘差作為相機(jī)標(biāo)定評判標(biāo)準(zhǔn)并不是很嚴(yán)格。我們上面介紹的,在相機(jī)標(biāo)定過程中,需要經(jīng)過很多次的迭代優(yōu)化,迭代優(yōu)化的目標(biāo)函數(shù)都是使反投影殘差最小。在優(yōu)化的過程中也許會陷入局部最小,或者由于這次一些其他原因(光線原因,擺放標(biāo)定板原因等),噪聲比較大,標(biāo)定參數(shù)也許不是最優(yōu),但是反投影殘差也可能比較小。因此我們需要尋求更好的評判標(biāo)準(zhǔn)。
    針對雙目相機(jī)。雙目相機(jī)最大優(yōu)勢是可以三角化重建標(biāo)志點(diǎn)。因此在標(biāo)定結(jié)束后,可以將標(biāo)定板放置在攝像頭前,對標(biāo)定板的標(biāo)志點(diǎn)進(jìn)行三角化,得到三維坐標(biāo)。然后求解標(biāo)定板上圓心之間的距離,和真實(shí)數(shù)據(jù)對比距離差。代碼如下:

    //------------------------evaluate stereo calibration result---------------------------vector<float> v3D_error;vector<double> disparity_aver;std::cout << "******** stereo calibration error ********" << std::endl;for (int index=calib_imgs_num; index<calib_imgs_num+evalu_imgs_num; ++index){char left_img[100], right_img[100];sprintf(left_img, "%s%s%d.%s", img_dir.c_str(), leftimg_filename.c_str(), index, images_format.c_str());sprintf(right_img, "%s%s%d.%s", img_dir.c_str(), rightimg_filename.c_str(), index, images_format.c_str());cv::Mat img1 = imread(left_img, CV_LOAD_IMAGE_COLOR);cv::Mat img2 = imread(right_img, CV_LOAD_IMAGE_COLOR);if (img1.empty() || img2.empty() ){std::cout << index << ": NAN" << std::endl;continue;}cv::Mat recImg1, recImg2, gray1, gray2;remap(img1, recImg1, rmap[0][0], rmap[0][1], CV_INTER_LINEAR);remap(img2, recImg2, rmap[1][0], rmap[1][1], CV_INTER_LINEAR);cv::cvtColor(recImg1, gray1, CV_BGR2GRAY);cv::cvtColor(recImg2, gray2, CV_BGR2GRAY);bool found1 = false, found2 = false;Size board_size = Size(board_width, board_height);vector<Point2f> corners1, corners2;vector<cv::Point3f> v3DPoints;found1 = cv::findChessboardCorners(recImg1, board_size, corners1, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);found2 = cv::findChessboardCorners(recImg2, board_size, corners2, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);if (found1 && found2){cv::cornerSubPix(gray1, corners1, cv::Size(5, 5), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));cv::drawChessboardCorners(gray1, board_size, corners1, found1);cv::cornerSubPix(gray2, corners2, cv::Size(5, 5), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));cv::drawChessboardCorners(gray2, board_size, corners2, found2);}else{std::cout << index << ": NAN" << std::endl;continue;}//stereo disparity errordouble disparity_error = 0.0;for (int i = 0; i < board_width * board_height; ++i){double disparity_tmp = abs(corners1[i].y - corners2[i].y);disparity_error += disparity_tmp;}disparity_error = disparity_error / (board_width * board_height);disparity_aver.push_back(disparity_error);//3D reconstruction errordouble f = P1.at<double>(0, 0);double tx = T.at<double>(0, 0);double ty = T.at<double>(1, 0);double tz = T.at<double>(2, 0);for (int i = 0; i < board_width * board_height; ++i){double y_1 = corners1[i].x - P1.at<double>(0, 2);double x_1 = corners1[i].y - P1.at<double>(1, 2);double y_2 = corners2[i].x - P2.at<double>(0, 2);double x_2 = corners2[i].y - P2.at<double>(1, 2);double w_z = (f * tx - x_2 * tz) / (x_2 - x_1);double w_x = w_z * x_1 / f;double w_y = w_z * y_1 / f;v3DPoints.push_back(cv::Point3f(w_x, w_y, w_z));}float dis_error = 0.0;int err_num = 0;//水平相鄰角點(diǎn)距離誤差for (int i = 0; i < board_height; ++i)for (int j = 0; j < board_width - 1; ++j){float err_t = abs(sqrt((v3DPoints[i * board_width + j].x - v3DPoints[i * board_width + j + 1].x) * (v3DPoints[i * board_width + j].x - v3DPoints[i * board_width + j + 1].x) + (v3DPoints[i * board_width + j].y - v3DPoints[i * board_width + j + 1].y) * (v3DPoints[i * board_width + j].y - v3DPoints[i * board_width + j + 1].y) + (v3DPoints[i * board_width + j].z - v3DPoints[i * board_width + j + 1].z) * (v3DPoints[i * board_width + j].z - v3DPoints[i * board_width + j + 1].z)) - square_size);dis_error += err_t;err_num++;std::cout << "error " << i * board_width + j << ": " << err_t << std::endl;}//豎直相鄰角點(diǎn)距離誤差for (int i = 0; i < board_width; ++i){for (int j = 0; j < board_height - 1; ++j){float err_t = abs(sqrt((v3DPoints[j * board_width + i].x - v3DPoints[(j + 1) * board_width + i].x) * (v3DPoints[j * board_width + i].x - v3DPoints[(j + 1) * board_width + i].x) + (v3DPoints[j * board_width + i].y - v3DPoints[(j + 1) * board_width + i].y) * (v3DPoints[j * board_width + i].y - v3DPoints[(j + 1) * board_width + i].y) + (v3DPoints[j * board_width + i].z - v3DPoints[(j + 1) * board_width + i].z) * (v3DPoints[j * board_width + i].z - v3DPoints[(j + 1) * board_width + i].z)) - square_size);dis_error += err_t;err_num++;//cout << err_t << endl;}}v3D_error.push_back(dis_error / err_num);std::cout << "image." << index << "--stereo disparity error: " << disparity_error << " pixel" << "---"<< "3D reconstruction erro: " << dis_error / err_num << " mm" <<std::endl;

    針對單目相機(jī),使用反投影殘差應(yīng)該也許是評價相機(jī)標(biāo)定很好的方法了。

    以上主要是針對高精度標(biāo)定怎么去做,相機(jī)標(biāo)定原理核心是張正友標(biāo)定法,但是需要做一些改進(jìn)和優(yōu)化。這也是筆者以前的工作,現(xiàn)在主要做VSLAM方面的事情,對這方面沒有太大的要求,但相機(jī)標(biāo)定精度當(dāng)然是越高越好。并且相機(jī)標(biāo)定是一個最好的幾何視覺入門課程。

    這里有個自己寫的針對單目相機(jī),單目魚眼相機(jī),雙目相機(jī),雙目魚眼相機(jī)的opencv標(biāo)定代碼,魚眼相機(jī)使用的是equidistant畸變模型。代碼是基于別人上修改的,只加入了雙目重建誤差評價方法。至于高精度相機(jī)標(biāo)定方面的代碼,由于方方面面的原因,沒法公開。現(xiàn)在一些基于雙目視覺的高精度重建設(shè)備已經(jīng)可以達(dá)到微米級別,大多出自國外,這里我輩還需努力啊。
    opencv標(biāo)定代碼地址:https://github.com/GaoJunqiang/camera_calibration

    后面再出個博客專門介紹相機(jī)和線激光的標(biāo)定(線結(jié)構(gòu)光高精度三維重建領(lǐng)域,也是以前在研究生時的一個課題),相機(jī)和單線激光雷達(dá)標(biāo)定(多傳感器融合定位)。感覺這兩個之間有很多共同之處。

    參考

    • [1] Ahn S J, Warnecke H J, Kotowski R. Systematic geometric image measurement errors of circular object targets: Mathematical formulation and correction[J]. The Photogrammetric Record, 1999, 16(93): 485-502.
    • [2] 吳建霖, 蔣理興, 王安成,等. 圓形標(biāo)志投影偏心差補(bǔ)償算法[J]. 中國圖象圖形學(xué)報, 2018, 023(010):1549-1557.
    • [3] 黃道明. 近景攝影測量中圓形目標(biāo)的投影偏心差及模擬分析[J]. 工程建設(shè), 2011(02):14-17.
    • [4] 廖祥春, 馮文灝. 圓形標(biāo)志及其橢圓構(gòu)像間中心偏差的確定[J]. 武漢大學(xué)學(xué)報:信息科學(xué)版, 1999, 024(003):235-239.
    • [5] Heikkila J, Silven O. A four-step camera calibration procedure with implicit image correction[C]//Proceedings of IEEE computer society conference on computer vision and pattern recognition. IEEE, 1997: 1106-1112.

    總結(jié)

    以上是生活随笔為你收集整理的摄像机高精度标定的一些方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产免费视频一区二区三区 | 四虎影院在线 | 欧美最黄视频 | 亚洲最新av | 亚洲成人免费观看 | 欧美99视频| 成人免费国产 | 武林美妇肉伦娇喘呻吟 | 国产视频a| 天天操天天干天天爽 | 巨胸大乳www视频免费观看 | caobi视频 | 天堂av免费在线 | 韩国伦理片观看 | 91亚色在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 熟妇女人妻丰满少妇中文字幕 | 黄色一级片在线播放 | 欧美激情中文字幕 | 清冷学长被爆c躁到高潮失禁 | 成人拍拍视频 | 金8天国av | 国产二区电影 | www.youjizz国产 | 成人精品动漫 | 国产aaa大片 | 美女一级黄色片 | 国产精品久久久久久免费 | 性一交一黄一片 | 国产精品一区二区三区四区五区 | 色黄视频在线观看 | 插女生下面 | 久久大陆 | 黑人精品无码一区二区三区 | 国产又粗又大又长 | 国产同性人妖ts口直男 | 岛国av一区二区三区 | 日本超碰 | 深夜毛片 | 尤物精品在线 | 女人叉开腿让男人桶 | 日韩精品第一 | 亚洲毛片一区二区 | 少妇人妻一区二区 | 欧美αv | 五月婷婷综合在线观看 | 国产在线999 | 老司机福利精品 | 欧美视频免费看 | 青草视频在线看 | 涩色网| 亚洲射吧| 干美女少妇 | 精品久久人人 | 日韩经典第一页 | 欧美综合自拍 | 成人靠逼视频 | 国产精品美女毛片真酒店 | 韩国一级淫一片免费放 | 吸咬奶头狂揉60分钟视频 | 99热国产精品 | 亚洲熟妇av一区二区三区漫画 | 欧美一级一级 | avtt男人天堂 | 久久久精品福利 | 黑花全肉高h湿play短篇 | 久久99精品国产.久久久久 | www.69pao.com| 中日毛片 | 亚洲欧美激情在线 | 曰本丰满熟妇xxxx性 | 久久一区二区三区视频 | 午夜精品一区二 | 日本少妇一级 | 午夜尤物| 黄色在线观看视频网站 | 国精产品一二三区精华液 | 先锋影音中文字幕 | 亚洲毛片在线看 | 黄色av软件 | 激情在线观看视频 | www.久久.com | 精品人妻午夜一区二区三区四区 | 久久在线观看 | 日韩中出 | www.欧美日韩 | 噜噜啪啪 | 韩日午夜在线资源一区二区 | 又粗又猛又爽又黄少妇视频网站 | 嫩草国产在线 | 夜色福利 | 6080黄色 | 永久免费精品 | 在线91av| 青草一区二区 | 国产精品女同一区二区 | 亚洲无码久久久久久久 | 免费精品视频一区二区三区 | 亚洲人妻一区二区三区 |