DevNote

Poisson Image Editing 본문

Image Processing

Poisson Image Editing

Ahnda 2020. 2. 3. 23:34

이번 포스팅에선 두 이미지를 '자동으로' 그리고 '자연스럽게' 합성하는 seamless blending 기술인 Poisson Image Editing에 대해 이야기 하려고 한다. 아래의 그림은 Poisson Image Editing을 직관적으로 보여주는 예이다.  해변과 사람들이 있는 배경 이미지에 상어 이미지를 잘라 적절한 위치에 배치하고 합성(Blending)함으로써 알고리즘을 수행한다.

 

 

Fig 1. Input images initial-alignmented and result image 

 

 

위 이미지의 왼쪽 사진은 완벽한 이미지가 아니다. 두 이미지(배경과 상어)의 물 색상과 명도가 다르기 때문에 경계면이 굉장히 부자연스럽다. 누군가 포토샵을 이용해 자연스럽게 수정한다고 하더라도 포토샵의 숙련도에 따라 결과물의 퀄리티가 제각각일 것이며, 많은 노력과 시간을 필요로하는 작업이 될 것이다. 따라서 이 알고리즘(Poisson Image Editing)은 합성하고 싶은 두 이미지의 초기 설정이 주어지면, 부자연스러운 경계면을 자연스럽게 리터치해준다.

 

 이 알고리즘은 경계조건에 따른 이미지 그래디언트 매칭과 Discrete Solution 두 단계를 거쳐 수행된다. 우선 첫 번째 단계에 대해 살펴보겠다.

기본적인 방법은 이미지 B의 물체(여기서는 상어)의 특성을 유지하면서 A의 색상을 B의 내부로 혼합하는 것이다. 여기서 상어라는 형체는 이미지 그래디언트를 통해 쉽게 뽑아낼 수 있다. (이미지의 물체 특성은 점들의 색상차이가 어떻게 변하는가에 따라 정해진다. 즉, 중요한 것은 해당 위치에서의 특정 색상 값이 아니라, 주변과의 색상차이.) 이 이미지 그래디언트를 유지하면서 경계면으로부터 A의 색상을 B의 내부방향으로 혼합하면된다. 이 때, H를 A에 색상에 맞게 B의 개선된 버전이라고 하면, H는 아래와 같은 식으로 표현할 수 있다.

𝐻(𝑥,𝑦)=𝐴(𝑥,𝑦)∀(𝑥,𝑦)  ∈  𝜕𝐵 (1)

두 번째 단계인 Discrete Solution에서는 위의 식을 푼다. 해당 식은 이산적인 방법으로 풀 수 있다. 그 이유는 이미지는 픽셀들의 집합이며, 이 픽셀들의 위치는 수평방향과 수직방향의 정수위치로 표현되기 때문이다. (실수로 표현되는 경우는 없다.) 따라서 B(혹은 H)의 그래디언트 값은 아래의 식과 같이 표현될 수 있다.

|𝛻𝐵(𝑥,𝑦)| = 4𝐵(𝑥,𝑦)−𝐵(𝑥−1,𝑦)−𝐵(𝑥+1,𝑦)−𝐵(𝑥,𝑦−1)−𝐵(𝑥,𝑦+1) (2)

실제로 B의 내부를 채우는것은 의외로 간단하다. 경계면의 픽셀 값(RGB)을 고정하고 식(2)를 계산해주기만 하면 된다. 어떻게 이게 가능할까? 채우고자하는 픽셀 위치에서의 색상은 경계면으로부터의 색상값을 시작으로 이미지 그래디언트를 유지하는 방향으로 채워주는 것이다. 결국 식을 계산하여 정리하면 식(2)와 같이 된다. (실제로 구현할 때는 이미지 밖으로 벗어나거나, B의 영역 밖으로 넘어가서 이웃의 갯수가 4개가 아닌 경우도 고려해주어야 한다.)

 

Fig 3. Source(left, a jet) and destination image(right)

결과는 위의 두 이미지를 이용하여 아래의 영상과 같다. 사실 구현할 때에는 조금더 많은 내용이 필요하다. Source의 B영역을 구하기 위한 마스크 이미지를 만드는 것 부터, Destination에서의 B에 대한 경계값 픽셀을 고정하는 것까지 그것에 해당된다. 이러한 내용들은 영상을 통해 대략적으로 확인 가능하다. 마스크는 OpenCV의 마우스 콜백을 이용해 Source Image 속 물체에 대해 대략적인 경계면을 사용자가 그린 후 내부를 FloodFill 알고리즘을 통해 채워주었다. 그리고 경계값에 해당하는 픽셀들 또한 마우스 콜백을 통해 마우스가 지나간 부분의 픽셀들의 위치를 컨테이너(코드에서는 vector<cv::Point>를 사용)에 저장함으로써 해결할 수 있었다.

 

 

 

 

 

출처 : https://www.cs.virginia.edu/~connelly/class/2014/comp_photo/proj2/poisson.pdf

http://www.ctralie.com/Teaching/PoissonImageEditing/