Matlab 원 인식

matlab을 사용하면 많은 이미지 처리를 단순화 할 수 있습니다.
그 중 이번 기사는 엔의 인식 방법에 대해 정리해 나가고 싶다.
1. 이미지(페인트)에서 읽기
2. 이미지 파일을 읽고 인식
3. 실시간으로 이미지 처리
이 3단계로 진행해 간다. (우선, 1만 투고. 2,3은 시간에 여유가 있으면 투고해 가고 싶습니다)
참고 기사 Acquisition Using the Image Acquisition Tool(영어판)

사용환경


  • matlab 2019a
  • windows 10

  • 1. 이미지(페인트)에서 읽기



    아래 이미지의 원을 인식합니다. 타원도 포함하고 있기 때문에 어디까지가 원으로 인식되는지의 테스트도 포함해 봅니다. (fig1.png)


    1.1 이미지 불러오기(+전처리)



    matlab
     rgb=imread(fig1.png);
    

    본래는 이 단계에서 컬러 화상에서 그레이스케일로의 변환➀이나 그레이스케일로부터 2치화의 바이너리 이미지를 생성➁하고, 화상 처리를 진행해 나가는 것이 계산량은 적어지지만, 이번은 변환은 생략한다. (변환하는 함수는 다음과 같다)

    matlab
    gray=rgb2gray(rgb) % ➀ カラー→グレー
    BW=imbinarize(gray) % ➁ グレー→2値化
    

    1.2엔 탐색



    허프 변환을 사용하는 방법으로 imfindcircles 함수 사용
    참조 기사 imfindcircles 함수
    사용 예는 다음과 같습니다.

    matlab
     [centers, radii] = imfindcircles(A, [Rmin Rmax])
    

    (입력 인수)
    (1) A <- 탐색하려는 이미지 (이미지) 입력
    (2)[Rmin Rmax]
    주의) 너무 범위를 넓게 취하면 정밀도가 떨어지므로
    ・Rmax < 3×Rmin
    ・・(Rmax - Rmin)<100
    에 맞도록 범위를 설정합니다. (단, 본 기사에서는 소스 코드의 간략화를 위해 분할하지 않고 쓰고 있다)

    만약 어려운 것 같다면. 이하와 같이 범위를 분할하는 것이 좋다.

    matlab
        [CENTERS1, RADII1, METRIC1] = IMFINDCIRCLES(A, [20 60]);
        [CENTERS2, RADII2, METRIC2] = IMFINDCIRCLES(A, [61 100]);
    

    (출력 인수)
    (1) centers <- 원의 중심 좌표
    (2) radii<- 추정 반경

    1.3 원 만들기



    viscircles 함수를 사용하여 위에서 지정한 원을 작성합니다.

    matlab
     viscircles(centers, radii,'Color','g')
    

    옵션으로 'Color'를 더하면 원의 색을 변경할 수 있으며 (설정하지 않으면 적색) b에서 청색, g에서 녹색으로 지정할 수 있습니다.

    1.4 요약



    전체 코드를 정리하면 아래와 같이 되어 아래 그림과 같이 녹색으로 둘러싸인 3개의 원을 인식할 수 있었다.

    matlab
    %コードまとめ
     %画像を読み込む
     rgb=imread(fig1.png);
     [centers, radii] = imfindcircles(rgb, [10 100])
     imshow(rgb);
     hold on;
     viscircles(centers, radii,'Color','g')
    


    위 그림과 같이 녹색으로 둘러싸인 원 3개를 인식할 수 있었다!

    좋은 웹페이지 즐겨찾기