名もなき池(通称:モネの池)の写真をKuwahara filterで絵画っぽくしてみる

岐阜県の関市に名もなき池(通称:モネの池)というちょっとした観光スポットがあります。
https://www.kankou-gifu.jp/spot/5094/

その名の通り、特に名前はないのですが、クロード・モネの描いた「睡蓮」っぽいということで話題になっているようです。
今週末は岐阜に旅行していて、このモネの池に行ってきました。

実際に何枚かモネの池の写真を撮ったので、Pythonを使って絵画っぽくアレンジしてみたいと思います。

睡蓮とは

ポーラ美術館のサイトから引用します。
https://www.polamuseum.or.jp/collection/006-0340/

モネは、1883年からパリの北西70kmの美しい村ジヴェルニーに移住し、ここに家を建て、庭を造成します。家の前には色とりどりの花が咲き乱れる「花の庭」を造り、1893年には家の敷地の道路を隔てた隣の土地を買い、「水の庭」を造りました。「水の庭」には、池を作り睡蓮を植え、池の上にはモネは好きだった日本の浮世絵に描かれたような日本風の太鼓橋が架けました。そして池の周りには柳、竹、桜、藤、アイリス、牡丹などさまざまな植物が植えられました。この自分がつくり上げた幻想的な庭で、モネは睡蓮の池と橋の風景を描いていますが、この作品は18点の連作のうちの1点です。この後、しだいに彼の興味は時間や天候による光の変化が、池の水面におよぼすさまざまな効果に向かっていきます。なお、モネの家と庭は、息子ミシェルが亡くなった1966年に国家に遺贈され、現在公開されています。




Kuwahara filterで画像処理


Qiitaの「Kuwahara filterとかいう明らかに日本人の名前な画像フィルターに出会い、試してみたらすごかったので紹介する。」という記事を参考にしました。
Kuwahara filterとはどうやら画像ファイルを絵画っぽくするプログラムとのことです。

ということはモネの睡蓮っぽいと噂されるモネの池を絵画っぽくすることで、モネの描いた「睡蓮」っぽくなるのではないかと思いました。

なんだかよく分からないですし、何の意味があるかは分からないですが、とりあえずやってみます。

実際にとった写真


モネの睡蓮については予備知識ゼロだったので、適当に撮りました。









上記の4枚を題材にして絵画っぽくしてみようと思います。

画像処理コード


import numpy as np
import cv2
import matplotlib.pyplot as plt
import os


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


#画像保存ディレクトリ
os.chdir(r'pic folder path')

# 画像名を入れる
picture = np.array(plt.imread("pic_name.JPG"))
filtered_pic = kuwahara(pic=picture, r=15, resize=False, rate=0.2)
plt.imshow(filtered_pic)
plt.axis("off")
plt.show()


実際に画像処理をすると以下のようになります。









どうでしょう、絵画っぽくなったと思うのですが。

以上、今回は小ネタでした。

TOPページ