亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? anaskel.cpp

?? 獲取對象骨架的方法
?? CPP
字號:
//***************************************************************************
//
// Matlab C routine file:  anaskel.cpp
//
// Written 8/04 by N. Howe
//
// Input:
//   skel:  shape to find skeleton for
//
// Output:
//   dmap:  directional maps
//   exy:   coordinates of endpoints
//   jxy:   coordinates of junction points
//
//***************************************************************************

#include "mex.h"

//***************************************************************************

#define SQR(x) (x)*(x)
#define MIN(x,y) (((x) < (y)) ? (x):(y))
#define MAX(x,y) (((x) > (y)) ? (x):(y))
#define ABS(x) (((x) < 0) ? (-(x)):(x))
#define errCheck(a,b) if (!(a)) mexErrMsgTxt((b));
#define bdCheck(a,b) mxAssert(((a)>=0)&&((a)<(b)),"Bounds error.")

//***************************************************************************

const int N_DIRECTIONS = 4;

const int connected_nbrs[256] = {
  0,1,1,1,1,1,1,1,
  1,2,2,2,1,1,1,1,
  1,2,2,2,1,1,1,1,
  1,2,2,2,1,1,1,1,
  1,2,2,2,2,2,2,2,
  2,3,3,3,2,2,2,2,
  1,2,2,2,1,1,1,1,
  1,2,2,2,1,1,1,1,
  1,1,2,1,2,1,2,1,
  2,2,3,2,2,1,2,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,2,1,2,1,
  2,2,3,2,2,1,2,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,2,1,2,1,
  2,2,3,2,2,1,2,1,
  2,2,3,2,2,1,2,1,
  2,2,3,2,2,1,2,1,
  2,2,3,2,3,2,3,2,
  3,3,4,3,3,2,3,2,
  2,2,3,2,2,1,2,1,
  2,2,3,2,2,1,2,1,
  1,1,2,1,2,1,2,1,
  2,2,3,2,2,1,2,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,2,1,2,1,
  2,2,3,2,2,1,2,1,
  1,1,2,1,1,1,1,1,
  1,1,2,1,1,1,1,1
};

const int nbr_branches[256] = {
  0,1,1,1,1,2,1,2,
  1,2,2,2,1,2,2,2,
  1,2,2,2,2,3,2,3,
  1,2,2,2,2,3,2,3,
  1,2,2,2,2,3,2,3,
  2,3,3,3,2,3,3,3,
  1,2,2,2,2,3,2,3,
  2,3,3,3,2,3,3,3,
  1,2,2,2,2,3,2,3,
  2,3,3,3,2,3,3,3,
  2,3,3,3,3,4,3,4,
  2,3,3,3,3,4,3,4,
  1,2,2,2,2,3,2,3,
  2,3,3,3,2,3,3,3,
  2,3,3,3,3,4,3,4,
  2,3,3,3,3,4,3,4,
  1,1,2,2,2,2,2,2,
  2,2,3,3,2,2,3,3,
  2,2,3,3,3,3,3,3,
  2,2,3,3,3,3,3,3,
  2,2,3,3,3,3,3,3,
  3,3,4,4,3,3,4,4,
  2,2,3,3,3,3,3,3,
  3,3,4,4,3,3,4,4,
  1,2,2,2,2,3,2,3,
  2,3,3,3,2,3,3,3,
  2,3,3,3,3,4,3,4,
  2,3,3,3,3,4,3,4,
  2,2,3,3,3,3,3,3,
  3,3,4,4,3,3,4,4,
  2,3,3,3,3,4,3,4,
  3,3,4,4,3,4,4,4,
};

const int isN[256] = {
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  0,1,1,1,0,1,1,1,
  0,1,1,1,0,1,1,1,
  0,1,0,1,0,1,0,1,
  0,1,0,1,0,1,0,1,
  0,1,1,1,0,1,1,1,
  0,1,1,1,0,1,1,1,
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  0,1,1,1,0,1,1,1,
  0,1,1,1,0,1,1,1,
  0,1,0,1,0,1,0,1,
  0,1,0,1,0,1,0,1,
  0,1,1,1,0,1,1,1,
  0,1,1,1,0,1,1,1,
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,1,0,1,0,1,0,1,
  0,1,0,1,0,1,0,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,1,0,1,0,1,0,1,
  0,1,0,1,0,1,0,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1
};

const int isNE[256] = {
  0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,0,1,1,0,0,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1
};

const int isE[256] = {
  0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,0,0,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1
};

const int isSE[256] = {
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  0,0,0,0,0,0,0,0,
  0,1,0,1,0,1,0,1,
  0,0,0,0,0,0,0,0,
  1,1,1,1,1,1,1,1,
  0,0,0,0,0,0,0,0,
  1,1,1,1,1,1,1,1,
  0,0,0,0,0,0,0,0,
  1,1,1,1,1,1,1,1,
  0,0,0,0,0,0,0,0,
  1,1,1,1,1,1,1,1,
  0,0,0,0,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,0,0,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,0,0,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  0,0,0,0,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1
};

//****************************************************************************
//
// neighborhood() returns a byte value representing the immediate neighborhood
// of the specified point in bit form, clockwise from 12:00.
//
// R/O arr:  binary pixel array
// R/O i,j:  coordinates of point
// R/O nrow, ncol:  dimensions of binary image
// Returns:  bit representation of 8-neighbors
//

template <class T>
inline int neighborhood(T *arr, int i, int j, int nrow, int ncol) {
  int p = i+j*nrow;
  int condition = 8*(i <= 0)+4*(j <= 0)+2*(i >= nrow-1)+(j >= ncol-1);

  //mexPrintf("Condition:  %d\n",condition);
  switch (condition) {
  case 0:  // all sides valid
    mxAssert((p-nrow-1)>=0,"Too low.");
    mxAssert((p+nrow+1)<nrow*ncol,"Too high.");
    return (arr[p-1]?1:0) + (arr[p+nrow-1]?2:0) + (arr[p+nrow]?4:0) +
      (arr[p+nrow+1]?8:0) + (arr[p+1]?16:0) + (arr[p-nrow+1]?32:0) +
      (arr[p-nrow]?64:0) + (arr[p-nrow-1]?128:0);
  case 1:  // right side not valid
    return (arr[p-1]?1:0) + (arr[p+1]?16:0) + (arr[p-nrow+1]?32:0) +
      (arr[p-nrow]?64:0) + (arr[p-nrow-1]?128:0);
  case 2:  // bottom not valid
    return (arr[p-1]?1:0) + (arr[p+nrow-1]?2:0) + (arr[p+nrow]?4:0) +
      (arr[p-nrow]?64:0) + (arr[p-nrow-1]?128:0);
  case 3:  // bottom and right not valid
    return (arr[p-1]?1:0) + (arr[p-nrow]?64:0) + (arr[p-nrow-1]?128:0);
  case 4:  // left side not valid
    return (arr[p-1]?1:0) + (arr[p+nrow-1]?2:0) + (arr[p+nrow]?4:0) +
      (arr[p+nrow+1]?8:0) + (arr[p+1]?16:0);
  case 5:  // left and right sides not valid
    return (arr[p-1]?1:0) + (arr[p+1]?16:0);
  case 6:  // left and bottom sides not valid
    return (arr[p-1]?1:0) + (arr[p+nrow-1]?2:0) + (arr[p+nrow]?4:0);
  case 7:  // left, bottom, and right sides not valid
    return (arr[p-1]?1:0);
  case 8:  // top side not valid
    return (arr[p+nrow]?4:0) + (arr[p+nrow+1]?8:0) + (arr[p+1]?16:0) + 
      (arr[p-nrow+1]?32:0) + (arr[p-nrow]?64:0);
  case 9:  // top and right not valid
    return (arr[p+1]?16:0) + (arr[p-nrow+1]?32:0) + (arr[p-nrow]?64:0);
  case 10:  // top and bottom not valid
    return (arr[p+nrow]?4:0) + (arr[p-nrow]?64:0);
  case 11:  // top, bottom and right not valid
    return (arr[p-nrow]?64:0);
  case 12:  // top and left not valid
    return (arr[p+nrow]?4:0) + (arr[p+nrow+1]?8:0) + (arr[p+1]?16:0);
  case 13:  // top, left and right sides not valid
    return (arr[p+1]?16:0);
  case 14:  // top, left and bottom sides not valid
    return (arr[p+nrow]?4:0);
  case 15:  // no sides valid
    return 0;
  }
}

//****************************************************************************
//
// dotrim() trims unnecessary points from the skeleton.
//
// R/O inp:  binary pixel array
// R/O nrow, ncol:  dimensions of binary image
// W/O skel:  newly trimmed skeleton
//

template <class T>
void dotrim(T *inp, int nrow, int ncol, unsigned char *skel) {
  int i, j, hood;

  for (j = 0; j < ncol; j++) {
    for (i = 0; i < nrow; i++) {
	skel[i+j*nrow] = (unsigned char)(inp[i+j*nrow]);
    }
  }
  for (j = 0; j < ncol; j++) {
    for (i = 0; i < nrow; i++) {
      if (skel[i+j*nrow]) {
	hood = neighborhood(skel,i,j,nrow,ncol);
	skel[i+j*nrow] = (connected_nbrs[hood] > 1)||(nbr_branches[hood]==1);
      } else {
	skel[i+j*nrow] = 0;
      }
    }
  }
}

//****************************************************************************
//
// This is the Matlab entry point.
//
//****************************************************************************

void 
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
  int i, j, p, hood;
  int nrow, ncol, nend, nbar, njunc, iend, ijunc;
  unsigned char *skel;
  double *north, *northeast, *east, *southeast, *exy, *jxy;
  mxArray *cell;
	
  // check for proper number of arguments
  errCheck(nrhs == 1,"Exactly one input argument required.");
  errCheck(nlhs <= 3,"Too many output arguments.");

  // check format of arguments
  errCheck(mxIsUint8(prhs[0])||mxIsLogical(prhs[0])||mxIsDouble(prhs[0]),
           "Input must be binary image.");
  nrow = mxGetM(prhs[0]);
  ncol = mxGetN(prhs[0]);

  // allocate temporary space
  skel = (unsigned char *)mxMalloc(nrow*ncol*sizeof(unsigned char));

  // trim skeleton
  if (mxIsDouble(prhs[0])) {
    dotrim(mxGetPr(prhs[0]),nrow,ncol,skel);
  } else {
    dotrim((unsigned char *)(mxGetPr(prhs[0])),nrow,ncol,skel);
  }  
  
  // allocate output space
  plhs[0] = mxCreateCellMatrix(1,4);
  cell = mxCreateDoubleMatrix(nrow, ncol, mxREAL);
  mxSetCell(plhs[0],0,cell);
  north = mxGetPr(cell);
  cell = mxCreateDoubleMatrix(nrow, ncol, mxREAL);
  mxSetCell(plhs[0],1,cell);
  northeast = mxGetPr(cell);
  cell = mxCreateDoubleMatrix(nrow, ncol, mxREAL);
  mxSetCell(plhs[0],2,cell);
  east = mxGetPr(cell);
  cell = mxCreateDoubleMatrix(nrow, ncol, mxREAL);
  mxSetCell(plhs[0],3,cell);
  southeast = mxGetPr(cell);

  // analyze...
  for (j = 0; j < ncol; j++) {
    for (i = 0; i < nrow; i++) {
      p = i+j*nrow;
      if (skel[p]) {
	hood = neighborhood(skel,i,j,nrow,ncol);
	north[p] = isN[hood];
	northeast[p] = isNE[hood];
	east[p] = isE[hood];
	southeast[p] = isSE[hood];
	//mexPrintf("Point (%d,%d):  Hood %d -> %d, %d, %d, %d.\n",
	//	  i,j,hood,isN[hood],isNE[hood],isE[hood],isSE[hood]);
      } else {
	north[p] = northeast[p] = east[p] = southeast[p] = 0;
      }
    }
  }

  // extra data if necessary
  if (nlhs > 1) {
    // count junctions and endpoints
    njunc = 0;
    nend = 0;
    nbar = 0;
    for (j = 0; j < ncol; j++) {
      for (i = 0; i < nrow; i++) {
	if (skel[i+j*nrow]) {
	  hood = neighborhood(skel,i,j,nrow,ncol);
	  switch (nbr_branches[hood]) {
	  case 0:
	  case 1:
	    nend++;
	    break;
	  case 2:
	    nbar++;
	    break;
	  case 3:
	  case 4:
	    njunc++;
	    break;
	  }
	}
      }
    }
    //mexPrintf("Counted.\n");

    plhs[1] = mxCreateDoubleMatrix(2, nend, mxREAL);
    exy = mxGetPr(plhs[1]);
    iend = 0;
    for (j = 0; j < ncol; j++) {
      for (i = 0; i < nrow; i++) {
	if (skel[i+j*nrow]) {
	  hood = neighborhood(skel,i,j,nrow,ncol);
	  if (nbr_branches[hood] < 2) {
	    exy[iend+1] = i+1;
	    exy[iend] = j+1;
	    iend += 2;
	  }
	}
      }
    }
  }
  if (nlhs > 2) {
    plhs[2] = mxCreateDoubleMatrix(2, njunc, mxREAL);
    jxy = mxGetPr(plhs[2]);
    ijunc = 0;
    for (j = 0; j < ncol; j++) {
      for (i = 0; i < nrow; i++) {
	if (skel[i+j*nrow]) {
	  hood = neighborhood(skel,i,j,nrow,ncol);
	  if (nbr_branches[hood] > 2) {
	    jxy[ijunc+1] = i+1;
	    jxy[ijunc] = j+1;
	    ijunc += 2;
	  }
	}
      }
    }  
  }
  
  // free stuff
  mxFree(skel);
}

/****************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美高清在线| 国产精品久久久久久久久快鸭| 亚洲午夜激情av| 欧美一区二区视频免费观看| 亚洲一二三四在线| 久久久午夜精品| 欧美无砖砖区免费| 国产一区二区剧情av在线| 国产精品久久久99| 4438成人网| www.色精品| 国产成人免费视频网站| 亚洲国产视频在线| 国产精品―色哟哟| 欧美一区二区人人喊爽| 国产91精品免费| 国产在线视视频有精品| 亚洲国产成人高清精品| 国产日韩欧美精品一区| 欧美日韩精品欧美日韩精品| 高清国产一区二区| 国内精品国产成人国产三级粉色| 一区二区三区中文字幕在线观看| 久久综合色8888| 精品理论电影在线| 欧美亚洲综合色| 在线观看欧美黄色| 欧美色视频一区| 色婷婷综合久久久久中文| 高清国产一区二区| 成人午夜短视频| 不卡av免费在线观看| 国产精品亚洲午夜一区二区三区 | 91免费观看视频在线| 东方aⅴ免费观看久久av| 国产成人久久精品77777最新版本| 九九**精品视频免费播放| 人妖欧美一区二区| 成人在线视频一区二区| 91麻豆swag| 欧美一区二区播放| 中文字幕国产一区| 亚洲综合图片区| 久久不见久久见免费视频1| 国内精品免费在线观看| 成人午夜又粗又硬又大| 91久久精品网| 久久久国产精华| 亚洲影视在线播放| 大胆亚洲人体视频| 日韩欧美色综合网站| 国产精品久久久久三级| 国产91在线看| 91精品久久久久久久91蜜桃 | 青青草97国产精品免费观看| 中文字幕av在线一区二区三区| 国产精品―色哟哟| 日韩欧美一区在线观看| 91麻豆精品国产| 久久蜜臀中文字幕| 日韩av高清在线观看| 国产成人精品影院| 精品国产在天天线2019| 亚洲一区二区免费视频| eeuss鲁一区二区三区| 精品精品欲导航| 日日夜夜一区二区| 成人高清伦理免费影院在线观看| 99久久99久久精品免费看蜜桃| 精品人在线二区三区| 亚洲一区二区三区激情| 在线亚洲高清视频| 亚洲精品国久久99热| 99riav一区二区三区| 中文字幕亚洲欧美在线不卡| 成人激情免费网站| 一区二区三区高清| 欧美色综合天天久久综合精品| 一区二区三区在线影院| www.色综合.com| 亚洲成人免费在线| 欧美大片一区二区| 国产91精品免费| 一区二区三区中文字幕精品精品| 91国偷自产一区二区三区成为亚洲经典| 国产欧美日韩不卡| 91亚洲精品久久久蜜桃网站 | 日本韩国精品在线| 日本欧美一区二区三区乱码| 国产亚洲欧美日韩日本| 91久久精品日日躁夜夜躁欧美| 天堂va蜜桃一区二区三区漫画版| 欧美大片在线观看一区二区| 麻豆免费看一区二区三区| 国产三级精品在线| 91精品国产麻豆| 色婷婷综合久久| 国产精品亚洲第一| 免费成人av在线播放| 亚洲欧美精品午睡沙发| 久久免费偷拍视频| 欧美日韩国产成人在线免费| 99久久伊人精品| 国产91在线看| 国产精品99久久不卡二区| 日韩av一区二区三区四区| 亚洲激情第一区| 综合激情成人伊人| 亚洲欧美怡红院| 日本一区二区免费在线观看视频| 日韩欧美一卡二卡| 91精品一区二区三区久久久久久 | 国产成人午夜片在线观看高清观看| 午夜伊人狠狠久久| 午夜欧美视频在线观看| 午夜精品一区二区三区电影天堂| 国产精品家庭影院| 亚洲免费在线观看视频| 亚洲欧美激情插| 无吗不卡中文字幕| 日韩av网站在线观看| 久久电影网站中文字幕| 久久99国产乱子伦精品免费| 国产制服丝袜一区| 99精品偷自拍| 欧美日韩大陆在线| 精品国产亚洲在线| 国产欧美一区二区精品仙草咪| 亚洲精品在线免费播放| 亚洲欧美在线另类| 日韩精品久久理论片| 国模少妇一区二区三区| 成人高清视频免费观看| 欧美日韩综合不卡| 日本一区二区综合亚洲| 国产精品福利在线播放| 日韩电影一二三区| 9人人澡人人爽人人精品| 欧美日韩国产一级片| 国产精品三级av在线播放| 午夜精品久久久久久久99水蜜桃 | 男女男精品网站| 99精品黄色片免费大全| 久久亚洲一区二区三区明星换脸 | 粉嫩久久99精品久久久久久夜| 麻豆精品视频在线观看视频| 亚洲第一电影网| 三级欧美韩日大片在线看| 日韩电影在线看| 国产精品激情偷乱一区二区∴| 亚洲成人av一区| 91在线视频在线| 久久精品亚洲乱码伦伦中文 | 色综合中文综合网| 国产一区二区三区四区五区美女| 成人动漫一区二区| 欧美精品在线一区二区三区| 国产精品久久久久久亚洲毛片| 亚洲午夜久久久久久久久久久| 国产福利一区在线观看| 国产午夜精品理论片a级大结局 | 久久久综合激的五月天| 寂寞少妇一区二区三区| 精品久久久久久久人人人人传媒| 日韩精品国产欧美| 久久久久久久综合| 成人国产电影网| 亚洲成人免费看| 欧美videos大乳护士334| 国产一区二区三区四区在线观看| 久久精品日产第一区二区三区高清版 | 一区二区免费看| 91精品国产高清一区二区三区| 美女精品自拍一二三四| 欧美国产精品一区二区| 色狠狠色狠狠综合| 六月丁香婷婷色狠狠久久| 欧美国产精品中文字幕| 欧美一区二区网站| 国产白丝精品91爽爽久久| 亚洲第一激情av| 亚洲欧美另类在线| 久久精品一区四区| 91精品国产综合久久福利 | 成人免费视频免费观看| 亚洲3atv精品一区二区三区| 国产精品亲子乱子伦xxxx裸| 色婷婷久久99综合精品jk白丝| 婷婷综合五月天| 亚洲男人电影天堂| 亚洲欧洲日本在线| 久久免费的精品国产v∧| 日韩精品中文字幕在线一区| 91传媒视频在线播放| 91一区二区在线观看| 东方欧美亚洲色图在线| 成人免费看视频| 国产v综合v亚洲欧| 国产成人免费av在线| 国产一区二区调教|