자바+opencv 3.2.0 hough 직선 검 측 실현
4172 단어 Javaopencv3.2.0직선 검 측
발전 사:
1962 년 에 PaulHough 가 처음으로 직선 과 곡선 을 측정 하 는 데 사용 하 자고 제안 했다.
1972 년 에 Richard Duda&Peter Hart 에서 널리 사용 되 었 고 임의의 모양 물체 의 식별 으로 확대 되 었 다.
원리:
한 직선 이 직각 좌표계 아래 에 있 는 표현 형식 은 y=k*x+b 이 고 극 좌표계 아래 에 서 는 r=x*cos(theta)+y*sin(theta)을 나타 낸다.hough 변환 사상 은 직각 좌표계 아래 의 한 점 이 극 좌표계 아래 의 직선 에 대응 하 는 것 이다.마찬가지 로 극 좌표계 아래 의 한 점 은 직각 좌표계 아래 의 직선 에 대응 한다.직각 좌표계 의 직선,경사 율 과 절 거 리 는 일정한 것 이다.그러면 이 직선 상의 모든 점 은 극 좌표계 에서 한 점 에 초점 을 맞 추 는데 이런 초점 점 은 직각 좌표계 의 직선 을 대표 한다.
직선 x=c 에 대해 실제 응용 에서 매개 변수 방정식 p=x*cos(theta)+y*sin(theta)을 사용 합 니 다.이렇게 하면 이미지 평면 상의 한 점 은 매개 변수 r-theta 평면 상의 한 곡선 에 대응 하고 다른 것 은 똑 같 습 니 다.
표준 hough 변환:
Imgproc.HoughLines(Mat image, Mat lines, double rho, double theta, int threshold, double srn, double stn, double min_theta, double max_theta)
매개 변수 설명:
이미지:원본 이미지
lines:hough 변환 후 검 측 된 라인 의 출력 벡터 저장
rho:픽 셀 단위 의 거리 정밀도
theta:라디안 단위 의 각도 정밀도
threshold:어떤 부분 이 직선 일 때 반드시 도달 해 야 하 는 값 을 식별 합 니 다.
srn:rho 매개 변수의 나 누 기 거리,기본 값 0
stn:theta 매개 변수의 나 누 기 거리,기본 값 0
min_theta:검 측 된 직선의 최소 각도
max_theta:검 측 된 직선의 최대 각도
예제 코드:
public static void main(String[] args)
{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat srcImage = Imgcodecs.imread("F:\\6597210504144579394.jpg");
Mat dstImage = srcImage.clone();
Imgproc.Canny(srcImage, dstImage, 400, 500, 5, false);
Mat storage = new Mat();
Imgproc.HoughLines(dstImage, storage, 1, Math.PI / 180, 200, 0, 0, 0, 10);
for (int x = 0; x < storage.rows(); x++)
{
double[] vec = storage.get(x, 0);
double rho = vec[0];
double theta = vec[1];
Point pt1 = new Point();
Point pt2 = new Point();
double a = Math.cos(theta);
double b = Math.sin(theta);
double x0 = a * rho;
double y0 = b * rho;
pt1.x = Math.round(x0 + 1000 * (-b));
pt1.y = Math.round(y0 + 1000 * (a));
pt2.x = Math.round(x0 - 1000 * (-b));
pt2.y = Math.round(y0 - 1000 * (a));
if (theta >= 0)
{
Imgproc.line(srcImage, pt1, pt2, new Scalar(255, 255, 255, 255), 1, Imgproc.LINE_4, 0);
}
}
Imgcodecs.imwrite("F:\\dst2.jpg", srcImage);
}
누적 확률 hough 변환:Imgproc.HoughLinesP(Mat image, Mat lines, double rho, double theta, int threshold, double minLineLength, double maxLineGap)
매개 변수 설명:
이미지:원본 이미지
lines:hough 변환 후 검 측 된 라인 의 출력 벡터 저장
rho:픽 셀 단위 의 거리 정밀도
theta:라디안 단위 의 각도 정밀도
threshold:어떤 부분 이 직선 일 때 반드시 도달 해 야 하 는 값 을 식별 합 니 다.
minLine Length:최저 선분 의 길이,기본 값 은 0 입 니 다.
max Line Gap:같은 줄 과 점 사 이 를 연결 하 는 가장 큰 거 리 를 허용 합 니 다.기본 값 은 0 입 니 다.
예제 코드:
public static void main(String[] args)
{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat srcImage = Imgcodecs.imread("F:\\6597210504144579394.jpg");
Mat dstImage = srcImage.clone();
Imgproc.Canny(srcImage, dstImage, 400, 500, 5, false);
Mat storage = new Mat();
Imgproc.HoughLinesP(dstImage, storage, 1, Math.PI / 180, 50, 0, 0);
for (int x = 0; x < storage.rows(); x++)
{
double[] vec = storage.get(x, 0);
double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3];
Point start = new Point(x1, y1);
Point end = new Point(x2, y2);
Imgproc.line(srcImage, start, end, new Scalar(255, 255, 255, 255), 1, Imgproc.LINE_4, 0);
}
Imgcodecs.imwrite("F:\\dst2.jpg", srcImage);
}
원본 그림:표준 hough 변환 결과:
누적 확률 hough 변환 결과:
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.