컨볼 루션 매트릭스는 어떻게 작동합니까?
-
19-09-2019 - |
문제
이것이 프로그래밍과 관련이 없다는 것을 알고 있지만 Convolution 행렬이 PHP GD 기능에 어떻게 작동하는지 알아야합니다. Google에서 많이 검색했지만 잘 설명하는 것을 찾을 수 없습니다.
해결책
나는 컨볼 루션 필터의 이론에 들어갔다.
다른 팁
작업은 각 픽셀을 주변 픽셀의 가중 평균으로 대체하며, 여기서 가중치는 행렬에 의해 주어집니다. 다음은 예제 Convolution 매트릭스입니다.
1 1 1
1 1 1
1 1 1
이것이하는 일은 각 픽셀을 해당 픽셀을 중심으로 한 3x3 블록의 평균 값으로 바꾸는 것입니다. 또 다른 것이 있습니다 :
0 0 0
0 1 0
0 0 0
이 매트릭스는 아무것도하지 않고 원래 백을 제공합니다.
무게도 부정적 일 수 있습니다. 이 행렬은 픽셀 옆에 픽셀의 평균값을 빼냅니다.
0 -1 0
-1 4 -1
0 -1 0
컨볼 루션 매트릭스를 사용하면 미세 조정 흐름과 날카로운 효과를 수행 할 수 있습니다. 충분히 큰 경우 컨볼 루션 매트릭스를 사용하여 필터의 방향성 및 주파수 응답을 조정할 수 있습니다. 그러나 일반적으로 빠른 멍청한 흐름과 선명도에 사용됩니다.
PHP에 대해 구체적으로는 알지 못하지만 일반적으로 컨볼 루션 매트릭스는 특정 종류의 이미지 처리 효과를 구현하는 데 사용됩니다.
GD의 PHP 매뉴얼에서 가져온 간단한 예제 http://www.php.net/manual/en/function.imageconvolution.php:
다음과 같은 매트릭스가 있다고 가정 해 봅시다.
$M = array(array( 2, 0, 0),
array( 0, -1, 0),
array( 0, 0, -1));
해당 컨볼 루션 매트릭스를 이미지에 적용하면 이미지의 (x, y)에 위치한 각 픽셀에 대해 출력의 해당 픽셀이 다음과 같습니다.
$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
+ $I[x-1,y] *$M[1][0] + $I[x,y] *$M[1][1] + $I[x+1,y] *$M[1][2]
+ $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];
다시 말해, 컨볼 루션 매트릭스는 각 결과 픽셀을 소스 픽셀과 주변 픽셀의 선형 조합으로 계산하는 데 사용됩니다.
디바이저 매개 변수는 전체 결과를 무언가로 나누는 데 사용되며 (일반적으로 행렬의 모든 값의 합입니다) 오프셋은 최종 출력 값에 상수 항을 추가하는 데 사용됩니다.