nktpgamw
@nktpgamw (onjga)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

pythonでの粒子画像の変位ベクトルの算出について

現在openpivを用いて二つの粒子画像中の、それぞれの粒子の変位ベクトルを算出するコードを作ろうと考えています。以下のコードはPIVによる速度ベクトルを取得するコードになっています。おそらく変位ベクトルの算出もPIVと同じ原理で行うことができると考えたのですが、以下のコードをどのように変えれば速度ベクトル算出のコードを変位ベクトルを算出するコードにできるでしょうか?有識者の方々のお力添えを頂きたいです。できれば改訂したコードを記載していただければありがたいです。

該当するソースコード

from openpiv import tools, pyprocess, validation, filters, scaling
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import cv2

import imageio
import importlib_resources
import pathlib


    frame_a  = tools.imread( "sobel_0.jpg" ,0)
    frame_b  = tools.imread( "sobel_1.jpg", 0)


    fig,ax = plt.subplots(1,2,figsize=(12,10))
    ax[0].imshow(frame_a,cmap=plt.cm.gray);
    ax[1].imshow(frame_b,cmap=plt.cm.gray);

    winsize = 30
    searchsize = 40
    overlap = 15
    dt = 0.02
    
    u0, v0, sig2noise = pyprocess.extended_search_area_piv(
            frame_a.astype(np.int32),
            frame_b.astype(np.int32),
            window_size=winsize,
            overlap=overlap,
            dt=dt,
            search_area_size=searchsize,
            sig2noise_method='peak2peak',
    )
        
    x, y = pyprocess.get_coordinates(
            image_size=frame_a.shape,
            search_area_size=searchsize,
            overlap=overlap,
    )
        

    invalid_mask = validation.sig2noise_val(
            sig2noise,
            threshold = 1.3,
    )
        
    u2, v2 = filters.replace_outliers(
            u0, v0,
            invalid_mask,
            method='localmean',
            max_iter=3,
            kernel_size=3,
    )

    x, y, u2, v2 = tools.transform_coordinates(x, y, u2, v2)


    tools.save('sobel_1.txt', x, y, u2, v2, invalid_mask)
    #ベクトルのテキストデータの読み込み
    list_01 = np.loadtxt('sobel_1.txt', skiprows=2, unpack=True)

    #配列の転置
    list_02 = np.array(list_01).T

    #np.ndarrayをpandas.DataFrameに変換
    df = pd.DataFrame(list_02, columns=['X', 'Y', 'U', 'V', 'Flag', 'Mask'])
    Flag = df["Flag"]
    U_f = df["U"]
    #誤ベクトルの除外

    df['U'].where(df['Flag'] == 0, inplace=True)
    df['V'].where(df['Flag'] == 0, inplace=True)

    #速度ベクトルのスカラー量の取得
    UV = np.sqrt(pow(df['U'],2)+pow(df['V'],2))
    UV_max=max(UV)
    UV_min=min(UV)

    #ベクトルの正規化,大きさの設定
    df['U'] = (searchsize - overlap)*df['U']/np.sqrt(pow(df['U'],2)+pow(df['V'],2))
    df['V'] = (searchsize - overlap)*df['V']/np.sqrt(pow(df['U'],2)+pow(df['V'],2))
        
    #速度ベクトル分布図の画像の初期化設定
    fig = plt.figure()
        
    #速度ベクトルの表示
    plt.quiver(df['X'], df['Y'], df['U'], df['V'],
                   np.sqrt(pow(df['U'],2)+pow(df['V'],2)),
                   cmap='jet', angles='xy',scale_units='xy',scale=1,)
        
    #グラフの背景画像の読み込み
    img_or = cv2.imread("sobel_1.jpg")
        
    #画像のPixelサイズの抽出(高さ, 幅, 色)
    h, w, _ = img_or.shape
        
    #画像の上下反転
    img_t = cv2.flip(img_or, 0)
        
    #グラフ領域の設定
    plt.xlim([0,w])
    plt.ylim([0,h])
    
    cmap = plt.cm.jet
        
    #グラフの背景画像の設定
    plt.imshow(img_t, alpha=0.6)
        
    #グラフのグリットの設定
    plt.grid()
        
    #グラフの設定の反映
    plt.draw()
    plt.show()
        
    #速度ベクトル分布図の保存
    fig.savefig("vecter_1.jpg",dpi=200,bbox_inches='tight')
0

No Answers yet.

Your answer might help someone💌