OpenCV의 개발 노트 (37 %) : 당신의 가장자리 감지 및 에지 검출 (쉬운 그림 + + 프로그램 소스 코드를 이해하기 위해) 검소한 연산자의 이해 지방 빨간색 깊이와 팔분

텍스트가 원래 문서의 경우, 허가없이 복제 할 수 없다
원래 블로거의 블로그 주소 : https://blog.csdn.net/qq21497936
원래 블로거 탐색 블로그 : https://blog.csdn.net/qq21497936/article/details / 102 478 062
이 문서의 블로그 주소 : https://blog.csdn.net/qq21497936/article/details/105237807
당신의 독자가, 가난한 사람의 지식과 무한, 또는 수요 변화, 또는 전문가, 또는 자신의 연구를 찾을 수

디렉토리

머리말

이 알고리즘의 개념을 가리키는

데모

에지 검출

개요

일반적으로 에지 검출 단계

첫 번째 단계 : 필터링 (노이즈 제거)

단계 2 : 강화 된 (에지 강화 특성)

세 번째 단계 : 검출

에지 검출 오퍼레이터

캐니 에지 검출 오퍼레이터

개요

원칙

첫 번째 단계는 소음 제거

단계 2 : 그래디언트의 크기와 방향을 산출

세 번째 단계 : 비 - 최대 억제.

4 단계 : 이력 임계 값

캐니 검출 함수 원형

소스 데모

버전 번호 v1.32.0에 해당 프로젝트 템플릿


OpenCV의 개발 상자

 

    OpenCV의 개발 노트 (37 %) : 당신의 가장자리 감지 및 에지 검출 (쉬운 그림 + + 프로그램 소스 코드를 이해하기 위해) 검소한 연산자의 이해 지방 빨간색 깊이와 팔분

 

 

머리말

      레드 뚱뚱한 사람이 될 수 있습니다! ! !

      이 장 가까운 화상 처리 및 화상 인식에 콘텐츠 검출 에지의 일부 측면을 설명하기 시작한다.

      일부 이미지 최적화 후에, 실제로, 이러한 비자로 (매트 유사한) 처리에 적층 될 수 있고, 그것은 상기 배경 테이블, 프레임, 이미지, 밀봉으로 분할되고, 전체 프로세스는 아이디어가 시일 코트 인식된다 상기 처리는,보다 정확하다.

 

이 알고리즘의 개념을 가리키는

      알고리즘은 밀접하게 특정 개인과 관련된 알고리즘의 특성은 기본 조작 (유사한 소프트웨어 API)가 있지만 기본 동작의 조합이 어떻게 작동의 기본 동작의 추가적인 최적화 외부에서이를 수행하는 방법을 장면에 따라, 그 사람들이 생각하는 방식입니다 거기에 고정 아니오 루틴이 (상대적으로 말하기 소프트웨어를 직접 개발 될 수있는 사업을 기반으로),이 부분은 코드 아마도 수천의 대상이 효과를 달성하기 위해 몇 년 몇 개월 가능한 알고리즘을 연구하는 알고리즘 시도의 효과를 연구하기 위해 많은 시간을 소비 할 필요가 몇 백 개 라인은, 수십 그것의 라인의 수천이있을 수 있습니다.

 

데모

 

에지 검출

개요

      에지 검출 상당히 데이터 량을 감소시키고, 즉, 관련없는 정보를 제거하는 영상의 중요한 구조적 특성을 보유 할 수있다. 클래스 및 제로 크로싱에 따라 클래스를 찾기 : 에지 검출을위한 많은 방법이 그들 대부분은 두 가지 범주로 나눌 수있다. 이미지의 1 차 도함수의 최대 값과 최소값을 찾아 조회에 기초하여, 경계를 검출하는 방법은 일반적으로 최대 경사 방향의 경계에 위치한다. 이 방법은 일반적으로 제로 크로싱 제로는 라플라시안 비선형 차이 표현을 넘어, 이차 미분의 제로 교차점을 찾는 것으로, 화상에 기초하여, 경계의 제로 크로싱을 검색한다.

일반적으로 에지 검출 단계

첫 번째 단계 : 필터링 (노이즈 제거)

      화상의 특성에 따라 필터링을 수행 특정 실태 필터링 알고리즘의 사용을 여과를 필요로한다.

      전면 필터링 알고리즘을 설명하기가있다 : 블록 필터링 , 평균 필터 , 가우시안 필터링 , 중앙값 필터링 , 양자 필터링 특정 주파수 같은 이러한 고주파 같은 상이한 상태, 저주파 필터링을위한.

특별한주의가 참 스펙 클 잡음, 고주파 잡음 대중 연설, 특정 범위 내의 저주파 노이즈 구배의 변화를 의미 이러한 점없고, 속도 변경, 내부 패치는 동일하고 기울기는 통상 화상 인 0도 낮은 주파수, 고주파, 필터 강제 증가를 수득 할 수 여과되지만 함께 부를 유지하는 필요성의 직접적인 결과는 필터링된다.

단계 2 : 강화 된 (에지 강화 특성)

      에지 인핸스 알고리즘 기울기 값의 큰 부분 (변화의 정도) 나오기 때문에, 정상적인 상황에서 일반적인 배경 및 전경 테두리 영역의 가장자리의 구배 값 (변화의 정도)이다를 사용 두드러진 정도로 향상된 에지 특성은, 에지를 강화하는 것이다 대형 (특별한 경우 : 일부 지역 통합 또는 이와 유사한 상황의 배경 색상).

      설명 상술 한 구배 상관 알고리즘을 달성하기 위해, 상관 연산에 그라데이션 값, 상기 출신 : 팽창 , 부식 , 개방 조작 , 폐쇄 조작 , 형태학 구배 , 상부 캡 (모자) , 검은 모자 .

세 번째 단계 : 검출

      이미지 강조 후에, 구배의 값은 여전히 ​​아 포인트 비교적 다수 존재하는 것을 알게되고, 응용 프로그램에서는 이러한 점은이 경우에 다시 필터링 연산을 수행하는 것, 에지 포인트 아니다. 일반적으로 사용되는 방법은 임계 화된다.

      상기 설명에 관련된 알고리즘을 임계 화하는 단계이다 : 임계 , 적응 적 문턱 값 , 고전 임계 알고리즘 시가현 세타 , 이중 임계 값 , 임계 값의 절반 도 연장 알고리즘 가득 확산 물 .

에지 검출 오퍼레이터

      에지 검출 오퍼레이터는 계속 에지 검출 오퍼레이터를 사용하여 어떤 필터링 향상, 노이즈 제거 스스로 수를 직접 사용할 수있는 방법의 세 단계를 검출 이미 좋은 패키지 필터링 향상에 기초하여 에지 검출 연산자이며 아들, 그 효과는 더 좋을 것이다.

 

캐니 에지 검출 오퍼레이터

개요

      캐니 에지 검출 오퍼레이터 존 F.Canny 1986 다단계 에지 검출 알고리즘을 개발한다.

      영리한 목표는 최적의 에지 검출 알고리즘을 찾을 수 있습니다 :

  • 낮은 에러율 : 극력 식별 실제 에지를 가능한 노이즈 생성뿐만 오경보 감소시키면서;
  • 높은 위치 : 엣지가 가능한 한 가깝게 실제 에지 화상과 식별하는 단계;
  • 최소 응답 : 이미지 가장자리 한번만 발견 될 수 있고, 화상 노이즈가 가장자리가 표시되어 있지있다.

영리한 알고리즘은 시간과 효과적인 계산 알고리즘에 영향을 미칠 것이다 조정 가능한 매개 변수의 수를 포함한다.

가우시안 필터의 크기 : 첫 번째 단계는 모든 평활화 필터 직접 캐니 알고리즘의 결과에 영향을 미칠 것이다. 흐림 필터가 작고 적은 생산 그래서 작은 세선 중요한 변화를 검출 할 수있다. 흐림 필터 큰 특정 지점의 이미지의 색상 값에 큰 코팅 영역을 더 생성이다. 이것의 결과는 에지 무지개 큰 부드러운 가장자리를 검출하는 것이보다 유용하다.

이중 임계 값 : 두 개의 임계 값이 임계 값보다 더 유연한 사용,하지만 여전히 일반적인 문제 임계 값이다. 임계 값이 중요한 정보를 놓칠 수 있습니다, 너무 높게 설정되어 임계 값이 너무 낮습니다, 미성년자는 매우 중요한 정보를 볼 수 있습니다. 어려운 모든 임계 값에 대한 일반적인 그림을 제공합니다.

원칙

      캐니 에지 검출은 다음 4 단계로 분할된다 :

첫 번째 단계는 소음 제거

       사용하여 A 가우시안 필터링, 크기 = 5 가우시안 필터 필터링 :

단계 2 : 그래디언트의 크기와 방향을 산출

      작동 과정에있어서, 소벨 필터.

      더미 어레이를 사용하여 첫 번째 컨벌루션은 x 및 y 방향으로인가된다 :

      화학식 그라데이션 크기와 방향을 계산 :

      °, 45 °, 90 °, 135 ° 0 : 그레디언트 크기는 일반적으로 네 가지 각도 중 하나 걸릴.

세 번째 단계 : 비 - 최대 억제.

      또한 그들 만이 후보의 가장자리이며, 일부 미세 라인을 유지, 비 에지 픽셀을 제외합니다.

4 단계 : 이력 임계 값

      히스테리시스 임계 값이 임계 값이 필요합니다 높은 임계 값과 지옥을;

  • 특정 픽셀 위치의 크기가 높은 임계치를 초과하는 경우, 화소는 좌측 에지 화소이고;
  • 특정 픽셀 위치의 크기가 높은 임계 값 미만이면, 화소는 제외되고;
  • 만약 두 개의 임계 값 사이의 소정 화소 위치의 크기, 높은 임계 값 위의 화소에 연결된 화소 만이 유지되고;

캐니 검출 함수 원형

void Canny( InputArray image,
          OutputArray edges,
          double threshold1,
          double threshold2,
          int apertureSize = 3,
          bool L2gradient = false );
  • 매개 변수 : 이미지의 InputArray 유형, 일반적으로 이력서 :: 매트, 싱글 채널 유형이어야합니다;
  • 두 개의 파라미터 : outputArray 형 가장자리, 출력 에지의 에지도, 단일 채널 8 비트의 화상이 입력 화상은 동일한 크기이고;
  • 세 개의 매개 변수 : 더블 형 THRESHOLD1, 시간 지연과 제 1 임계 값;
  • 네 개의 파라미터 : THRESHOLD2, 시간 지연이 두 유형의 제 2 임계 값;
  • 5 개 개의 매개 변수 : int 형 apertureSize, 소벨 연산자 기공 크기의 양, 기본 3이고;
  • 여섯 개 매개 변수 : BOOL 형 L2gradient, 작업의 계산 된 그라데이션 크기는 기본값은 false입니다;
void Canny( InputArray dx,
          InputArray dy,
          OutputArray edges,
          double threshold1,
          double threshold2,
          bool L2gradient = false );
  • 매개 변수 : InputArray 형 SRC, 일반적으로 이력서 :: 매트를 입력하거나 필수의 CV_16SC1 CV_16SC3;
  • 두 개의 매개 변수 : outputArray 형 DST, 크기와 종류 등의 SRC;
  • 세 파라미터 : 출력 에지 이미지의 에지는 동일한 하나의 채널 8 비트 화상, 화상 크기;
  • 네 개의 파라미터 : 더블 형 THRESHOLD1, 시간 지연과 제 1 임계 값 (참고 : 비율은 바람직 THRESHOLD2 THRESHOLD1 2 : 1 내지 3 : 1)
  • 5 개 개의 매개 변수 : THRESHOLD2, 이중형의 시간 지연과 제 2 임계 값 (참고 : 비가 바람직 THRESHOLD2 THRESHOLD1 2 : 1 내지 3 : 1)
  • 여섯 개 매개 변수 : BOOL 형 L2gradient, 작업의 계산 된 그라데이션 크기는 기본값은 false입니다.

 

소스 데모

void OpenCVManager::testCanny()
{
    QString fileName1 = "E:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/11.jpg";
    cv::Mat srcMat = cv::imread(fileName1.toStdString());

    int width = 400;
    int height = 300;

    cv::resize(srcMat, srcMat, cv::Size(width, height));

    cv::String windowName = _windowTitle.toStdString();
    cvui::init(windowName);

    cv::Mat windowMat = cv::Mat(cv::Size(srcMat.cols * 2, srcMat.rows * 2),
                                srcMat.type());

    cv::cvtColor(srcMat, srcMat, CV_BGR2GRAY);

    int threshold1 = 200;
    int threshold2 = 100;
    int apertureSize = 1;
    while(true)
    {
        windowMat = cv::Scalar(0, 0, 0);

        cv::Mat mat;
        cv::Mat dstMat;
        cv::Mat grayMat;

        // 转换为灰度图像
        // 原图先copy到左边
        cv::Mat leftMat = windowMat(cv::Range(0, srcMat.rows),
                                    cv::Range(0, srcMat.cols));
        cv::cvtColor(srcMat, grayMat, CV_GRAY2BGR);
        cv::addWeighted(leftMat, 0.0f, grayMat, 1.0f, 0.0f, leftMat);

        {
            cvui::printf(windowMat,
                         srcMat.rows * 1 + 100,
                         srcMat.cols * 0 + 20,
                         "threshold1");
            cvui::trackbar(windowMat,
                           srcMat.rows * 1 + 100,
                           srcMat.cols * 0 + 50,
                           200,
                           &threshold1,
                           0,
                           255);
            cvui::printf(windowMat,
                         srcMat.rows * 1 + 100,
                         srcMat.cols * 0 + 100, "threshold2");
            cvui::trackbar(windowMat,
                           srcMat.rows * 1 + 100,
                           srcMat.cols * 0 + 130,
                           200,
                           &threshold2,
                           0,
                           255);
            // 不能调整Sobel孔径,否则宕机
//            cvui::printf(windowMat,
//                         srcMat.rows * 1 + 100,
//                         srcMat.cols * 0 + 180, "apertureSize * 2 + 1");
//            cvui::trackbar(windowMat,
//                           srcMat.rows * 1 + 100,
//                           srcMat.cols * 0 + 210,
//                           200,
//                           &apertureSize,
//                           0,
//                           10);
            // 使用边缘检测
            cv::Canny(srcMat, dstMat, threshold1, threshold2, apertureSize * 2 + 1);
            // copy
            mat = windowMat(cv::Range(srcMat.rows * 1, srcMat.rows * 2),
                            cv::Range(srcMat.cols * 0, srcMat.cols * 1));

            cv::cvtColor(dstMat, grayMat, CV_GRAY2BGR);
            cv::addWeighted(mat, 0.0f, grayMat, 1.0f, 0.0f, mat);
        }
        // 更新
        cvui::update();
        // 显示
        cv::imshow(windowName, windowMat);
        // esc键退出
        if(cv::waitKey(25) == 27)
        {
            break;
        }
    }
}

 

버전 번호 v1.32.0에 해당 프로젝트 템플릿

      해당하는 버전 번호 v1.32.0

 

원래 블로거의 블로그 주소 : https://blog.csdn.net/qq21497936
원래 블로거 탐색 블로그 : https://blog.csdn.net/qq21497936/article/details/102478062를
이 문서의 블로그 주소 : HTTPS : // 블로그 .csdn.net / qq21497936 / 기사 / 세부 / 105237807

게시 된 255 개 원래 기사 · 원 찬양 365 · 전망 500 000 +

추천

출처blog.csdn.net/qq21497936/article/details/105237807