2017-05-23 7 views
0

이미지 필터링 커널을 구현하여 이미지 필터링을 사용하는 이미지에 커널을 구현하려고합니다. 그러나 경계 픽셀이 처리되는 방식을 실제로 이해하지 못합니다. 이미지의 경계 밖으로 떨어지는 필터 픽셀이 각각의 가장자리에 반사된다고 가정했습니다. 누구든지 나를 위해 이것을 더 명확하게 설명 할 수 있습니까?C++ 이미지 커널 래핑 컨볼 루션

감사합니다.

답변

0

답변이 없습니다. 일반적으로 가장 좋은 옵션 인 경계 픽셀을 반사 할 수 있습니다. 또는 랩핑 할 수 있습니다. 이미지가 원환 체 인 경우 더 쉽고 때로는 정확합니다. 회색으로 칠할 수도 있습니다. 그러나 당신은 당신이 무엇이든간에 가장자리 효과를 얻을 것입니다.

일반적으로 회선 코드 자체에서 가장자리를 보호하기보다는 패딩 픽셀을 추가하는 것이 가장 쉽습니다.

0

음, 이미지의 경계 픽셀을 처리하는 방법은 다양합니다. 공통적 인 하나는 경계 픽셀들 (커널 컨볼 루션 연산에 필요한 이웃들)을위한 이웃을 가지기 위해 이미지 행렬을 추가 선과 열로 패딩하는 것입니다.

a[0][0] a[0][1] ... a[0][n-1] 
a[1][0] a[1][1] ... a[1][n-1] 
    .   .    . 
    .   .    . 
    .   .    . 
a[n-1][0] a[n-1][1] ... a[n-1][n-1] 

당신은 n 번째 라인 아래의 최초 행과 첫 번째 라인 위의 n 번째 행을 넣어 패드를해야 :

예를 들어,이 n 개의 X N 이미지 매트릭스를 갖는다. 또한 첫 번째 열은 마지막 열 다음에 복사되고 첫 번째 열은 첫 번째 열 다음에 복사됩니다.

a[n-1][n-1] a[n-1][0] a[n-1][1] ... a[n-1][n-1] a[n-1][0] 

a[0][n-1]  a[0][0] a[0][1] ... a[0][n-1]  a[0][0] 
a[1][n-1]  a[1][0] a[1][1] ... a[1][n-1]  a[1][0] 
    .    .   .    .    . 
    .    .   .    .    . 
    .    .   .    .    . 
a[n-1][n-1] a[n-1][0] a[n-1][1] ... a[n-1][n-1] a[n-1][0] 

a[0][n-1]  a[0][0] a[0][1] ... a[0][n-1]  a[0][0] 

보시다시피, 모서리는 대칭 방식으로 반영됩니다. 새 테두리의 왼쪽 위 모서리는 초기 행렬에서 오른쪽 하단 요소의 값을 사용합니다.

커널 컨볼 루션 작업을 적용 할 (n + 2) x (n + 2) 행렬로 끝납니다.