영상 위치 정규화

Lily·2023년 10월 31일
0

TIL

목록 보기
17/21
  • 훈련 데이터 영상과 테스트 데이터 영상의 위치, 크기, 회전 등의 요소를 정규화하여 인식 성능을 향상시킬 수 있음
    • 숫자 영상의 바운딩 박스를 기준으로 중앙으로 위치 보정
    • 무게중심을 중앙에 위치하도록 위치 보정
Mat norm_digit(Mat& src)
{
	CV_Assert(!src.empty() && src.type() == CV_8UC1);

	// 1. 이미지 이진화
	Mat src_bin;
	threshold(src, src_bin, 0, 255, THRESH_BINARY | THRESH_OTSU);

	// 2. labeling을 통해 이미지 무게중심을 centroids로 받음
	Mat labels, stats, centroids;
	int n = connectedComponentsWithStats(
    			src_bin, labels, stats, centroids
            );

	// 3. 영상 크기에 대한 중심점까지 이동해야 할 dx, dy 추출
	Mat dst = Mat::zeros(src.rows, src.cols, src.type());
	for (int i = 1; i < n; i++) {
		if (stats.at<int>(i, 4) < 10) continue;

		int cx = cvRound(centroids.at<double>(i, 0));
		int cy = cvRound(centroids.at<double>(i, 1));

		double dx = 10 - cx;
		double dy = 10 - cy;

		// 4. 이동 변환을 통해 이미지 수정
		Mat warpMat = (Mat_<double>(2, 3) << 1, 0, dx, 0, 1, dy);
		warpAffine(src, dst, warpMat, dst.size());
	}

	return dst;
}

\\
\\

References

  • 자율주행 데브코스 황선규 강사님
profile
First Attempt In Learning

0개의 댓글