재밌는 시간이 왔군요.
이번에는 행렬을 이용하여 블러효과를 내보겠습니다.
이번에는 행렬을 이용하여 블러효과를 내보겠습니다.

기존에 알아본 RGB나 CMY, YUV등은 현재 픽셀값만 가지고 변환했다면, 이번 블러 효과나 다음에 알아볼 샤픈 효과는 현재 픽셀에 인접한 픽셀과의 상호 관계에 따라 변환이 이루어집니다.
간단히 설명해보죠.


원리는 현재 픽셀을 기준으로 인접한 8개의 픽셀을 연산에 이용하는 것인데요.

해당 픽셀 값을 ci(i=1~9), 가중치를 mi(i=1~9)라고 하면,
현재 픽셀의 색상값 c5=∑(ci*mi)(단,i=1~9)라고 할 수 있습니다.
풀어쓰면 아래와 같습니다.
c5=c1*m1 + c2*m2 + c3*m3 + c4*m4 + c5*m5 + c6*m6 + c7*m7 + c8*m8 + c9*m9
| 1/9 | 1/9 | 1/9 |
| 1/9 | 1/9 | 1/9 |
| 1/9 | 1/9 | 1/9 |
기본적인 3×3 블러 행렬은 위와 같습니다.
주의점은, 모든 가중치의 합이 1이어야 하고, 현재 픽셀을 제외한 인접 픽셀의 가중치는 0이상이어야 합니다. 현재 픽셀을 제외한 8개의 픽셀의 가중치를 우선 준 후에 모든 가중치의 합이 1이 되도록 현재 픽셀의 값을 설정하면 되겠죠.
주의점은, 모든 가중치의 합이 1이어야 하고, 현재 픽셀을 제외한 인접 픽셀의 가중치는 0이상이어야 합니다. 현재 픽셀을 제외한 8개의 픽셀의 가중치를 우선 준 후에 모든 가중치의 합이 1이 되도록 현재 픽셀의 값을 설정하면 되겠죠.



그러면, 예제로 행렬 값을 몇개 살펴보고 마무리 하죠.
| 0 | .33 | 0 |
| 0 | .33 | 0 |
| 0 | .33 | 0 |
Blur
Blur는 세로로만 영향을 미치게 되어있습니다. 모든 픽셀이 영향을 줄 필요는 없습니다. 영향을 주지 않을 픽셀은 0으로 처리하면 되죠. 이 경우에는 세로로 두드러진 블러 효과를 낼 수 있습니다. 좌우의 픽셀은 영향을 미치지 않으니까요. 그렇다고 육안으로 쉽게 구분해 낼 수 있을 정도는 아닙니다.
Blur는 세로로만 영향을 미치게 되어있습니다. 모든 픽셀이 영향을 줄 필요는 없습니다. 영향을 주지 않을 픽셀은 0으로 처리하면 되죠. 이 경우에는 세로로 두드러진 블러 효과를 낼 수 있습니다. 좌우의 픽셀은 영향을 미치지 않으니까요. 그렇다고 육안으로 쉽게 구분해 낼 수 있을 정도는 아닙니다.
| .22 | .22 | .22 |
| .22 | -.76 | .22 |
| .22 | .22 | .22 |
Blur2
Blur2는 Blur 보다 더 강한 블러 효과를 줍니다. 인접한 픽셀의 색상이 많이 섞으면 섞을 수록 블러 효과는 강하게 나타납니다. 위의 경우를 보면 알겠지만 인접 픽셀에서 1.76만큼 영향을 받고 자기 자신은 오히려 음으로 영향을 줍니다.
Blur3은 Blur2보다 더 강력합니다. 강력하다 못해 외곽선이 드러나네요. Blur2도 확대해보면 외곽선이 두드러집니다. 더 강력한 블러 효과를 주기 위해서는 행렬을 5×5 이상으로 넓혀 보면 되지 않을까 싶네요.
Blur4는 Blur2와 같고, 모든 가중치의 합이 2가 되도록 현재 픽셀의 가중치를 0.24로 지정했습니다. 행렬의 가중치의 합은 1이 되도록 해야 한다고 했는데, 1보다 커지면 전체적인 밝기가 증가합니다. RGB가 더하면 더할수록 밝아지는 가산혼합이기 때문입니다. 뭐 하나라도 더 더하면 색상값이 증가하죠. 결국 0에서 255로 갈 수록 밝아지므로 이 경우 전체적으로 밝아집니다.
Blur5는 Blur4에서 모든 가중치의 합이 0이 되도록 구성한 것입니다. 이 경우는 Blur4와 반대로 밝기가 감소합니다. 외곽선이 드러났네요. 외곽선 검출시에 이것을 응용해도 괜찮을 것 같군요.
행렬을 이용한 블러에 대해서 얼추 살펴보았습니다. 행렬을 이용하면 블러 뿐만 아니라 샤픈효과와 엠보스, 외곽선 검출 등을 할 수 있습니다. 그래픽 프로그램에서 사용자 정의 필터라는 것이 있습니다. 행렬을 통해 필터링을 통하여 위와 같은 효과를 낼 수 있도록 합니다.
페인트샵에서의 사용자 정의 필터 모습인데요. 최대 7×7까지 지원이 되네요.
관심있으신 분들은 해보시기 바랍니다.
그럼, 소스 올리고요. 다음에는 샤픈에 대해서 알아보겠습니다.
Blur2는 Blur 보다 더 강한 블러 효과를 줍니다. 인접한 픽셀의 색상이 많이 섞으면 섞을 수록 블러 효과는 강하게 나타납니다. 위의 경우를 보면 알겠지만 인접 픽셀에서 1.76만큼 영향을 받고 자기 자신은 오히려 음으로 영향을 줍니다.
| .5 | .5 | .5 |
| .5 | -3 | .5 |
| .5 | .5 | .5 |
Blur3
Blur3은 Blur2보다 더 강력합니다. 강력하다 못해 외곽선이 드러나네요. Blur2도 확대해보면 외곽선이 두드러집니다. 더 강력한 블러 효과를 주기 위해서는 행렬을 5×5 이상으로 넓혀 보면 되지 않을까 싶네요.
| .22 | .22 | .22 |
| .22 | .24 | .22 |
| .22 | .22 | .22 |
Blur4
Blur4는 Blur2와 같고, 모든 가중치의 합이 2가 되도록 현재 픽셀의 가중치를 0.24로 지정했습니다. 행렬의 가중치의 합은 1이 되도록 해야 한다고 했는데, 1보다 커지면 전체적인 밝기가 증가합니다. RGB가 더하면 더할수록 밝아지는 가산혼합이기 때문입니다. 뭐 하나라도 더 더하면 색상값이 증가하죠. 결국 0에서 255로 갈 수록 밝아지므로 이 경우 전체적으로 밝아집니다.
| .22 | .22 | .22 |
| .22 | -1.76 | .22 |
| .22 | .22 | .22 |
Blur5
Blur5는 Blur4에서 모든 가중치의 합이 0이 되도록 구성한 것입니다. 이 경우는 Blur4와 반대로 밝기가 감소합니다. 외곽선이 드러났네요. 외곽선 검출시에 이것을 응용해도 괜찮을 것 같군요.
행렬을 이용한 블러에 대해서 얼추 살펴보았습니다. 행렬을 이용하면 블러 뿐만 아니라 샤픈효과와 엠보스, 외곽선 검출 등을 할 수 있습니다. 그래픽 프로그램에서 사용자 정의 필터라는 것이 있습니다. 행렬을 통해 필터링을 통하여 위와 같은 효과를 낼 수 있도록 합니다.
페인트샵에서의 사용자 정의 필터 모습인데요. 최대 7×7까지 지원이 되네요.
관심있으신 분들은 해보시기 바랍니다.
그럼, 소스 올리고요. 다음에는 샤픈에 대해서 알아보겠습니다.

blur.zip





