Kuwahara filter라고 하는 분명히 일본인의 이름인 이미지 필터를 만나, 시험해 보면 대단했기 때문에 소개한다.

6/15 추가
나중에 제안에 대해 썼습니다 사진 표현으로서의 쿠와하라 필터의 제안

소개



Kuwahara filter(쿠와하라 필터)란?
쿠와하라 필터는 쿠와하라 미치요시씨라는 대학 교수(Wikipedia 曰く)가 고안한 평활화 필터의 일종으로, 내용의 단순함에 반해 능숙하게 걸치면 마치 유화와 같이 되는, 왠지 대단한 필터로 맞는다(먼저 결과 보고 싶은 분은 기사의 맨 아래를 들여다 보자)
Kuwahara filter -Wikipedia
SPECT용 데이터 처리(원논문?)

쿠와하라 필터의 내용




h tps : // 우 ぉ 아 d. 으아아아아. 오 rg/우이키페아/코몬 s/4/49/쿠와하라. jpg

쿠와하라 필터를 간단히 설명하면,
각 화소의 색을 그 주위의 임의의 폭의 좌상, 우상, 좌하, 우하의 정사각형 영역 중에서, 가장 분산의 합이 작은 영역의 평균 색으로 하는 필터입니다.

위의 이미지에서 말하면 중심 픽셀의 색상을 결정하려면

  • a의 영역의 분산, b의 영역의 분산, c의 영역의 분산, d의 영역의 분산을 RGB 각 색으로 계산해, 영역 마다 RGB 모두 더합합니다.
  • 1에서 얻은 분산을 비교하고, 가장 작은 영역의 색의 평균을 RGB 각각 계산합니다.
  • 2에서 구한 평균색을 중심화소의 색으로 설정합니다.

  • 위의 절차 또는 동등한 결과를 얻을 수 있는 프로세스를 거칩니다.
    또, 화상에서는 정사각형 영역의 한변은 3픽셀입니다만, 임의의 폭으로 k입니다.

    구현



    정의
    6/11 수정 for문을 폐해 10배 정도 고속화했습니다

    Kuwahara.py
    import numpy as np
    import cv2
    def kuwahara(pic,r=5,resize=False,rate=0.5): #元画像、正方形領域の一辺、リサイズするか、リサイズする場合の比率
        h,w,_=pic.shape
        if resize:pic=cv2.resize(pic,(int(w*rate),int(h*rate)));h,w,_=pic.shape
        pic=np.pad(pic,((r,r),(r,r),(0,0)),"edge")
        ave,var=cv2.integral2(pic)
        ave=(ave[:-r-1,:-r-1]+ave[r+1:,r+1:]-ave[r+1:,:-r-1]-ave[:-r-1,r+1:])/(r+1)**2 #平均値の一括計算
        var=((var[:-r-1,:-r-1]+var[r+1:,r+1:]-var[r+1:,:-r-1]-var[:-r-1,r+1:])/(r+1)**2-ave**2).sum(axis=2) #分散の一括計算
    
    #--以下修正部分--
        def filt(i,j):
            return np.array([ave[i,j],ave[i+r,j],ave[i,j+r],ave[i+r,j+r]])[(np.array([var[i,j],var[i+r,j],var[i,j+r],var[i+r,j+r]]).argmin(axis=0).flatten(),j.flatten(),i.flatten())].reshape(w,h,_).transpose(1,0,2)
        filtered_pic = filt(*np.meshgrid(np.arange(h),np.arange(w))).astype(pic.dtype) #色の決定
        return filtered_pic
    

    실행

    Kuwahara.py
    import matplotlib.pyplot as plt
    
    pic=np.array(plt.imread("input_picture.png")) #input_picture.pngをフィルターを掛けたい画像のパスに変更してください
    filtered_pic=kuwahara(pic,7,True,0.2)
    plt.imshow(filtered_pic)
    plt.show()
    

    결과



    작년 프랑스 여행에 갔을 때 찍은 사진의 일부입니다.

    원본 이미지


    필터 적용 후

    정사각형 영역의 한 변을 줄인 ver.


    _인인인인인인_
    >진짜 회화<
     ̄Y^Y^Y^Y^Y^Y^ ̄

    쉽게 시도하고 싶은 분에게



    colab에서 볼 수 있도록 해 보았습니다. 쿠와하라 _하지만. 이 pyn b
    원하는 이미지의 URL을 입력하여 사용해 보세요.

    요약



    캔버스에 그린 것 같은 질감이 굉장히 감동했기 때문에 소개했습니다. 간단하기 때문에 시도해보십시오.
    심도 맵을 준비하고 그에 따라 정사각형 영역의 크기를 조정하면 재미있을지도…
    큰 이미지라면 시간이 걸릴 수 있습니다. 세 번째 인수를 True로 만드는 것을 잊지 마십시오.

    좋은 웹페이지 즐겨찾기