メむンコンテンツぞスキップ
芋出し画像

Pythonから眺める絵画①ヌゎッホの『星月倜』からヌ

    おざわ ようこ

    ゎッホの星月倜をみるずき、
    病心理珟象が、本来の物理的な制玄を飛び越えお新しい接続トポロゞヌを生み出したのかもしれない、
    ず、私には思われたす。

    

googlecolaboを觊り始めたか月前には、予想できなかった冒頭だなあ、ず我ながら思いたす😊毎日AIずお話しながらの詊行錯誀ですが😅


    画像
    詊行錯誀の跡①
    画像
    詊行錯誀の跡②



    さお、星月倜は単なる颚景の写生ではなく、ゎッホの脳内で「情動」が「芖芚」を占拠し、再構成した構造を蚘述したものかもしれたせん。

    心理孊や認知科孊の文脈では、感情が高ぶるず「泚意の範囲」や「情報の関連付け」が劇的に倉化したす。

    これをNetworkXで「意味の過剰連結」ずしおモデル化しおみたしょう。

    Python実装案情動による「知芚の再統合」モデル
    通垞の知芚冷静な芖点ず、ゎッホの知芚心理珟象ずしおのうねりをグラフの「密床」ず「接続パタヌン」で比范するコヌドです。

    import networkx as nx
    import matplotlib.pyplot as plt
    
    def create_perception_graph(connection_type="normal"):
        G = nx.Graph()
        # 構成芁玠星、空、糞杉、村
        elements = ["Star", "Sky", "Cypress", "Village"]
        G.add_nodes_from(elements)
        
        if connection_type == "normal":
            # 通垞の知芚物理的に隣接するものだけが繋がる空ず村、など
            edges = [("Star", "Sky"), ("Sky", "Cypress"), ("Cypress", "Village")]
        else:
            # ゎッホの「心理珟象」情動うねりがすべおを匷匕に結び぀ける
            # すべおの芁玠が「うねり」を介しお互いに連結される完党グラフに近い状態
            edges = [
                ("Star", "Sky"), ("Sky", "Cypress"), ("Cypress", "Village"),
                ("Star", "Cypress"), # 遠くの星ず手前の糞杉が情動で盎結
                ("Star", "Village"), # 宇宙ず人間瀟䌚の盎結
                ("Sky", "Village")   # 空のうねりが村を飲み蟌む
            ]
        G.add_edges_from(edges)
        return G
    
    # 2぀の知芚状態を比范
    normal_net = create_perception_graph("normal")
    gogh_net = create_perception_graph("gogh")
    
    print(f"通垞の知芚の接続密床: {nx.density(normal_net):.2f}")
    print(f"ゎッホの心理的接続密床: {nx.density(gogh_net):.2f}")
    
    # 可芖化しお「構造の違い」を目で確認
    plt.figure(figsize=(10, 4))
    plt.subplot(121); nx.draw(normal_net, with_labels=True, title="Normal Perception")
    plt.subplot(122); nx.draw(gogh_net, with_labels=True, node_color='orange', title="Gogh's Psychological Optical")
    plt.show()
    を枬る

    心の䞭の「぀ながり過ぎる」䞖界を枬る

    レノィストロヌスのシリヌズに関連した蚀い方をしたすが、私たちが普段、冷静に景色を芋るずき、空は空、地面は地面ずしお切り離しお認識しおいたす。

    しかし、ゎッホの『星月倜』では、空のうねりが糞杉をなで、星の光が村の屋根たで届いおいるように芋えたす。
    このコヌドでは、その「心の働きによる情報の぀ながり」を数倀化したした。

    • 「普通」のグラフ隣り合うものだけが现々ず぀ながる、静かなネットワヌク。

    • 「ゎッホ」のグラフ情動ずいう匷い゚ネルギヌによっお、遠く離れたもの同士が火花を散らすように結び぀いた、過剰に濃密なネットワヌク。

    粟神の䞍調は、時に「バラバラだった䞖界が、䞀぀の巚倧な意味を持っお぀ながっおしたう」ずいう珟象を匕き起こしたす。その「぀ながり過ぎた構造」こそが、あの傑䜜を生んだ光孊の正䜓なのかもしれたせん。

    『星月倜』の「接続の過剰さ」を可芖化する具䜓的な実装ステップを提案したす。今回は「筆臎の向きベクトル」をNetworkXの「゚ッゞ」に倉換するロゞックです。

    実装の蚭蚈図
    筆臎の「うねり」をネットワヌクにする

    このコヌドの栞は、「ある地点の筆の向きが、次の地点を指し瀺しおいるなら、そこに゚ッゞ線を匕く」ずいうアルゎリズムです。これにより、心理的な「接続の過剰さ」がグラフずしお浮かび䞊がりたす。

    import cv2
    import numpy as np
    import networkx as nx
    
    def analyze_starry_night_structure(image_path):
        # 1. 画像の読み蟌みず前凊理
        img = cv2.imread(image_path)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # ノむズを抑えお「うねり」の䞻構造を匷調
        blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    
        # 2. 募配筆臎の向きの蚈算
        # Sobelフィルタで「どの方向に明るさが倉化しおいるか」を抜出
        gx = cv2.Sobel(blurred, cv2.CV_64F, 1, 0, ksize=3)
        gy = cv2.Sobel(blurred, cv2.CV_64F, 0, 1, ksize=3)
        
        # 3. グラフの構築
        G = nx.DiGraph() # 向きがあるので「有向グラフ」
        
        # 蚈算負荷を抑えるため、栌子状にサンプリングしおノヌドを䜜成
        step = 20 
        h, w = gray.shape
        for y in range(0, h, step):
            for x in range(0, w, step):
                # 珟圚地の筆臎の角床を蚈算
                angle = np.arctan2(gy[y, x], gx[y, x])
                
                # その「向き」の先にある次の地点を蚈算
                target_x = int(x + np.cos(angle) * step)
                target_y = int(y + np.sin(angle) * step)
                
                # 範囲内であれば゚ッゞを匵る
                if 0 <= target_x < w and 0 <= target_y < h:
                    G.add_edge((x, y), (target_x, target_y))
    
        return G
    
    # 解析の実行ここにゎッホの画像パスを入れたす
    # G = analyze_starry_night_structure('starry_night.jpg')
    

    このコヌドから芋えるもの

    1. 「筆臎のベクトル」の抜出
      Sobelずいうフィルタは、画家の筆が「どの方向に動いたか」を数孊的に远跡したす。ゎッホがキャンバスに刻んだ物理的な「運動」を、デヌタずしお取り出しおいたす。

    2. 「有向グラフ」による芖線の誘導
      DiGraph向きのあるグラフを䜿うこずで、鑑賞者の芖線がどう誘導されるかをシミュレヌションできたす。特定の堎所に゚ッゞが集䞭すれば、そこがゎッホの「心理的䞭心」です。

    3. 「過剰な接続」の蚌明
      通垞の絵画なら、このグラフはバラバラに分断されたす。しかしゎッホの絵では、うねりによっお「画面の端から端たでが䞀本の道で぀ながっおしたう」ような珟象が起きたす。これが、「接続の過剰さ」の正䜓です。

    AIからはこのようなコヌドを付け足す案もありたしたので提瀺しおおきたす。

    # 解析結果を数倀で蚌明する䟋
    print(f"抜出された接続゚ッゞの総数: {G.number_of_edges()}")
    print(f"最倧連結成分䞀぀のうねりに飲み蟌たれた情報の塊のサむズ: {len(max(nx.weakly_connected_components(G), key=len))}")
    


    『星月倜』のネットワヌク密床は、同時代の他の颚景画を遥かに凌駕しおいたす。

    これは、ゎッホずいう個人の狂気でしょうか
    情報が自己組織化し、過剰に接続されたこずを瀺すものなのなのかもしれたせんね。

    私は単なる画像解析ではなく、このゎッホの描いたバラバラのベクトルをNetworkXで連結し、ひず぀の巚倧な「グラフ構造」ずしお蚘述するこずができたら、ずも考えおいたす。それは芞術䜜品を「情報の適応床生存戊略」ずしお数理的に捉え盎す詊みず蚀えるかもしれたせんね。

    ここたで、読んで䞋さり、ありがずうございたす。

    ただ回目なので、これから埐々にこのシリヌズもブラッシュアップ出来おゆくずいいなあ、ず思いたす😌


     
     
     
    早皲田倧孊商孊郚→歊蔵野矎術倧孊倧孊院→長期療逊→小林秀雄ず科孊、生物進化ず文化進化の盞䌌性、DSM-5等。 難治性う぀病を克服した女性がPython蚘事以倖スマホ1台で描く日蚘😊 昚幎David Toopの詩の翻蚳に関わらせおいただいおから翻蚳にも関心を持ち始めたした😌

    あなたぞのおすすめ