画像用のフィルターで、面白いものを見つけました。
解説動画はこちら
さてフィルターの詳細はこちらです。
KuwaharaFilter
参考:Wikipedia
桑原フィルターは桑原さんが考案した
平滑化フィルターの一種で
まるで油絵のようになるのが特徴です。
実装している方がいたので
参考にして見ました。
ソースはこちら
イメージと大きさだけ指定してもらえば
フィルターがかかった画像が返ってきます。
画像のパスとフィルターのサイズだけ
変えてもらえば動くと思います。
どんな結果になるのかは
見てもらったほうが早いですよね。
写真にかけると油絵風になります。


とっても幻想的ですねー
図工の授業とか、真似してかけば
良い点が取れそうな感じです。
写真の加工にはもってこいの
フィルターだと思うので
気になる方は試して見てください。
今回はこれまでです
それでは
解説動画はこちら
さてフィルターの詳細はこちらです。
KuwaharaFilter
参考:Wikipedia
桑原フィルターは桑原さんが考案した
平滑化フィルターの一種で
まるで油絵のようになるのが特徴です。
実装している方がいたので
参考にして見ました。
ソースはこちら
import matplotlib.pyplot as plt
import numpy as np
import cv2
%matplotlib inline
def kuwahara_filter(img,r=3):
h,w,_ = img.shape
img = np.pad(img,((r,r),(r,r),(0,0)),"edge")
a,v = cv2.integral2(img)
a=(a[:-r-1,:-r-1]+a[r+1:,r+1:]-a[r+1:,:-r-1]-a[:-r-1,r+1:])/(r+1)**2
v=((v[:-r-1,:-r-1]+v[r+1:,r+1:]-v[r+1:,:-r-1]-v[:-r-1,r+1:])/(r+1)**2-a**2).sum(axis=2)
def result(i,j):
return np.array([a[i,j],a[i+r,j],a[i,j+r],a[i+r,j+r]])[
(np.array([v[i,j],v[i+r,j],v[i,j+r],v[i+r,j+r]]).argmin(axis=0).flatten(),
j.flatten(),i.flatten())].reshape(w,h,_).transpose(1,0,2)
return result(*np.meshgrid(np.arange(h),np.arange(w))).astype(img.dtype)
イメージと大きさだけ指定してもらえば
フィルターがかかった画像が返ってきます。
# 画像の読み込み
img = cv2.imread('画像のパス', cv2.IMREAD_COLOR)
# フィルターをかける
img2 = kuwahara_filter(img,サイズを数値で指定)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
# 描画
plt.figure(figsize=(10,10))
plt.imshow(img2)
plt.show()画像のパスとフィルターのサイズだけ
変えてもらえば動くと思います。
どんな結果になるのかは
見てもらったほうが早いですよね。
写真にかけると油絵風になります。


とっても幻想的ですねー
図工の授業とか、真似してかけば
良い点が取れそうな感じです。
写真の加工にはもってこいの
フィルターだと思うので
気になる方は試して見てください。
今回はこれまでです
それでは

