관리 메뉴

ComputerVision Jack

[영상처리 - 영상의 연산] 본문

Image Processing/C++ opencv Lib

[영상처리 - 영상의 연산]

JackYoon 2020. 1. 16. 15:28
반응형

사칙연산

덧셈

두영상의 각 화소값을 모두 더함

h(x, y) = f(x, y) + g(x, y) 

출력 영상 = 입력영상1 + 입력영상2 - 영상의 크기가 비슷한 이미지끼리 연산하는 것이 좋다.

 

평균

n개의 영상의 평균 값을 구하여 적용함

h(x, y) = ((fx, y) + g(x, y)) / n

 

이러한 평균을 이용하면 잡음을 약간은 제거 할 수 있다.

h(x, y) = (f(x, y) + f(x, y)  + ....+ f(x, y)) / n      /     n개

다양한 잡음 섞인 영상의 평균값을 이용하기 때문이다.

 

[코드]

for (int i = 0; i < img1.rows; i++) {
    for (int j = 0; j < img1.cols; j++) {
        result.at(i, j) = saturate_cast(img1.at(i, j) + img2.at(i, j));
    }
}

#영상의 산술 연산은 단순히 영상을 읽어와 새로운 Mat객체에 사칙연산을 적용하면 된다.

논리연산

AND 연산

and 비트연산을 이용하여 수행

화소 값의 각 비트 별 연산을 수행한다. 전체적으로 영상이 어두워진다.

 and연산

and 연산의 원리를 이용하면 왜 전체적으로 영상이 어두워지는지 알 수 있다.

 

OR 연산

or 비트 연산을 이용하여 수행

마찬가지로 화소 값의 각 비트 별 연산 수행을 실행한다. 전체적으로 영상이 밝아진다.

or연산

XOR 연산

xor 비트 연산을 이용하여 수행

화소 값의 각 비트 별 연산 수행. 비슷한 부분은 밝아지고 다른 부분은 어두워 진다.

xor연산

 

[코드]

for (int i = 0; i < img1.rows; i++) { 
    for (int j = 0; j < img1.cols; j++) { 
        result.at(i, j) = saturate_cast(img1.at(i, j) || img2.at(i, j)); 
    } 
}

# 코드적으로도 어려운 부분이 전혀 없다.

 

영상의 논리연산을 사용하는 이유

영상에 논리 연산을 이용하는 경우는 마스크를 이용하여 영상을 합성할 경우에 사용한다.

영상 합성

논리 연산 과정을 거쳐 충분히 도출해 낼 수 있다.

비트 평면 분할

영상의 각 비트에 해당하는 값을 이용하여 만든 이진 연상

최상위 비트 (MSB, Most Significant bit) : 영상의 윤곽 정보를 잘 표현

최하위 비트 (LSB, Least Significant bit) : 잡음에 가깝다.

 

따라서 이러한 최하위 비트에 여분의 정보를 삽입하여 이미지에 저장한다.

여분의 정보에는 워터마크등이 사용될 수 있다.

ex_영상 and연산.cpp
0.00MB
ex_영상 or연산.cpp
0.00MB
ex_영상 xor연산.cpp
0.00MB
ex_영상 덧셈.cpp
0.00MB
ex_영상 뺄셈.cpp
0.00MB
ex_영상 절대값 뺄셈.cpp
0.00MB
ex_영상 평균.cpp
0.00MB

반응형

'Image Processing > C++ opencv Lib' 카테고리의 다른 글

[영상처리 - 특징값 추출]  (0) 2020.01.23
[영상처리 - 기하학적 변환]  (0) 2020.01.21
[영상처리 - 공간적 필터링]  (0) 2020.01.19
[영상처리 - 화질 향상 기법]  (2) 2020.01.14
[영상처리 개요]  (0) 2020.01.14
Comments