ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Day7
    교육/서울 ICT 이노베이션 고오급 시각과정 2021. 5. 14. 13:54
    728x90

    1. 히스토그램

    1. 히스토그램 분석

    2. 히스토그램 스트레칭

    히스토그램 스트레칭은 영상의 히스토그램이 그레이스케일 전구간에 걸쳐 나타나도록 변경하는 선형 변환 기법

    명암비가 낮은 영상은 히스토그램이 특정구간에 집중되어 나타나게 되는데 이를 히스토그램 스트레칭을 통해 명암비를 높여 보기 좋은 사진으로 바꿔줌

    히스토그램 평활화(histogram equalization)는 히스토그램 스트레칭과 더불어 영상의 픽셀값 분포가 그레이스케일 전체 영역에 골고루 나타나도록 변경하는 알고리즘 중 하나

    특정 그레이 스케일 값 근방에서 픽셀 분포가 너무 많이 뭉쳐 있는 경우 이를 넓게 펼쳐주는 방식으로 픽셀 값 분포 조절

    0~255 사이 일정 영역을 나누어 그 안의 픽셀 수를 균등하게 맞춰줌

    h(g) : 그레이스케일 값이 g인 픽셀 개수

    h(g) : 영상 속 그레이스케일 값이 g인 픽셀 개수

    H(g) : 히스토그램 누적 함수, h(g)로부터 구해짐

    히스토그램 평활화는 H(g)를 픽셀 값 변환 함수로 사용, H(g)의 값의 범위가 보통 그레이스케일 값의 범위(0~255)보다 크기 때문에 정규화필요

    히스토그램 스트레칭은 원본 영상 유지, 히스토그램 평활화는 손실이 일어남

    2. 영상의 연산

    1. 영상의 산술 연산

    영상은 일종의 2차원 행렬이기 때문에 행렬의 산술 연산을 그대로 적용 가능 (element-wise, reduce(max, min, sum, avr, std...) 연산을 자주 사용)

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    using namespace std;
    
    int main(){
    	float datA[]={1,2,3,4};
        float datB[]={5,6,7,8};
        Mat a(2,2,CV_32FC1, datA);
        Mat b(2,2,CV_32FC1, datB);
        Mat c=a+b;
        cout<<c<<endl;
    }
    /*
    {6,8;
    10,12}
    */

    4. 영상의 논리 연산

    3. 필터링

    1. 영상의 필터링

    필터링이란 영상에서 원하는 정보만 통과시키고 원치 않는 정보는 걸러내는 작업

    잡음 제거, 선명하게, 마스크(=커널) 등

    필터링 연산 방법(=convolution)

    -밝기가 올라갈때는 +에지/밝기가 내려갈때는 -에지 => 밝기가 급격하게 바뀌면 미분값이 높다 ex)sobel mask

    -엠보싱 필터를 사용하면 입체감이 생김

    2. 영상의 블러링

    -블러는 1/n필터를 써서 경계를 여러 단계를 거치도록 함 ex)박스필터, 가우시안 필터

    3. 영상의 샤프닝

    샤프닝 : 영상을 날카로운 느낌(초점이 잘 맞은 사진처럼 객체의 윤곽이 뚜렷하게 구분)이 나도록 변경하는 필터링 기법

    영상 에지 근방에서 픽셀 값의 명암비가 커지도록 수정해야함

    언샤프 마스크 필터 : 언샤프한 영상(블러링이 적용된 영상)을 이용하여 역으로 날카로운 영상을 생성하는 필터

    영상을 샤프하게 만들려면 위의 그림과 같이 부드러운 기울기(블러)를 빡세게 바꿔줘야하는데 모든 블러를 처리하긴 힘듦 미세한 픽셀만 조정(g(x,y))해서 원본 영상을 왜곡시켜 샤프닝하게 만듦

    ->저주파 성분을 제거함으로써 만드는 것, 영상을 훼손하는 개념

    opencv에 함수가 없기 때문에 구현해줘야함

    for (int sigma=1;sigma<=5;sigma++){
    	Mat blurred;
        GaussianBlur(src, blurred, Size(), sigma);
        
        float alpha =1.f;
        Mat dst=(1+alpha)*src-alpha*blurred;
        
        String desc=format("sigma:%d",sigma);
        putText(dst, desc, Point(10,30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);
        
        imshow("dst",dst);
        waitKey();
    }
    

    4. 영상의 잡음 제거 필터링

    잡음(noise) : 원본 신호에 추가된 원치 않은 신호, 주로 영상을 획득하는 과정에서 발생하는데 디지털 카메라에서 사진을 촬영하는 경우에는 광학적 신호를 전기적 신호로 변환하는 센서에서 주로 잡음이 추가됨

    잡음 추가 : 원본 영상+가우시안 잡음

    #컬러 영상 잡음 추가
    Mat noise(src.rows, src.cols, CV_8UC3);
    randn(noise, 0, 20);
    
    Mat damaged=src+noise;

    잡음 제거 필터링 방법

    1. 양방향 필터

    경계를 기준으로 양쪽 방향을 따로 블러처리

    Mat dstBi;
    bilateralFilter(damaged, dstBi, -1, 10, 5);
    #damaged를 bilateralFilter해서 dstBi에 저장
    #필터링에 사용할 이웃 픽셀과의 거리(음수면 자동 계산), 색 공간에서 가우시안 필터 표준편차, 좌표 공감에서 가우시안 필터 표준편차

    2. 미디언 필터

    입력 영상에서 자기 자신 픽셀과 주변 픽셀 값 중에서 중간 값(median)을 선택하여 결과 영상 피셀 값으로 설정하는 필터링 기법

    잡음 픽셀 값이 주변 픽셀 값과 큰 차이가 있는 경우(ex.소금&후추 잡음(salt&pepper noise))에 효과적

    데미지를 입은 픽셀의 주변 영상의 픽셀을 정렬하고 중간값을 택함(최소값, 최대값을 선택하는 필터도 있음)

    medianBlur(damaged, dstMe, 3);
    #필터의 크기(3보다 같거나 큰 홀수 지정)

    '교육 > 서울 ICT 이노베이션 고오급 시각과정' 카테고리의 다른 글

    Day9  (0) 2021.06.16
    Day8  (0) 2021.05.14
    Day6  (0) 2021.05.13
    Day5  (0) 2021.05.11
    Day4  (0) 2021.05.10

    댓글

Designed by Tistory.