이 글에서는 랭크 필터(Rank Filter)를 사용하여 이미지를 흐릿하게 만드는 방법을 알아보겠습니다. Pillow 라이브러리의 ImageFilter 클래스에는 랭크 필터를 적용할 수 있는 RankFilter() 함수가 포함되어 있습니다.
RankFilter() 함수는 두 가지 매개변수를 받습니다. 바로 커널 크기(size)와 랭크(rank)입니다. 랭크 값에 따라 필터의 동작이 달라지는데, 그 규칙은 다음과 같습니다.
- 랭크 0: 최소값 필터(Min Filter)로 동작
- size*size/2: 중간값 필터(Median Filter)로 동작
- size*size-1: 최대값 필터(Max Filter)로 동작
원본 이미지

알고리즘
1단계: Pillow에서 Image와 ImageFilter를 임포트합니다.
2단계: 이미지를 엽니다.
3단계: RankFilter() 메서드를 호출하고 크기와 랭크를 지정합니다.
4단계: 결과 이미지를 화면에 표시합니다.
예제 코드
from PIL import Image, ImageFilter
im = Image.open('image_test.jpg')
im1 = im.filter(ImageFilter.RankFilter(7, 0))
im1.show()
코드 설명
위 예제에서는 7x7 크기의 커널을 사용하고 랭크를 0으로 지정했습니다. 랭크가 0이므로 커널 영역 내에서 가장 어두운(최소) 픽셀 값이 선택되는 최소값 필터로 동작합니다. 그 결과 이미지는 전체적으로 어두워지고 흐릿한 효과를 얻을 수 있습니다.
만약 중간값 필터 효과를 원한다면 랭크를 7*7/2인 24로, 최대값 필터 효과를 원한다면 랭크를 7*7-1인 48로 지정하면 됩니다.
출력 결과
