zl程序教程

您现在的位置是:首页 >  后端

当前栏目

偏振3d算法(两张图形方可建模立体图像)

建模3D算法 图像 图形 两张 立体
2023-09-14 09:05:38 时间
import numpy as np
import matplotlib.pyplot as plt

# 假设这个是 两个图像的比值的一行
# 有偏振的图像 /没有偏振的图像 
one = np.random.random([64, 2])


def gt_or_lt(i):
    return sum(i[1:] - i[:-1] > 0)


def compute_data():
    # 递增 递增   低 抬高  高 顺
    # 递增 递减   顺
    # 递减 递增  顺
    # 递减  递减   高  降低   低 顺
    one_list = []
    update_next_i = False
    for i, j in zip(one[:-1], one[1:]):
        if update_next_i:
            i = one_list[-1]
            update_next_i = not update_next_i
        if gt_or_lt(i):
            if gt_or_lt(j):
                if j[0] - i[-1] > 0:

                    one_list.append(j)
                else:
                    j += i[-1]

                    one_list.append(j)
                    update_next_i = not update_next_i
            else:

                one_list.append(j)
        else:
            if gt_or_lt(j):

                one_list.append(j)
            else:
                if j[0] - i[-1] > 0:
                    j = 0 - j

                    one_list.append(j)
                    update_next_i = not update_next_i
                else:

                    one_list.append(j)
    return [one[0]] + one_list


if __name__ == '__main__':
    one_data = compute_data()
    plt.plot(list(range(np.hstack(one_data).size)), np.hstack(one_data))
    plt.show()

实际验证和猜想的一样 就是 复原算法有待优化 稍微的 但是基本可以绘制出基本轮廓图3D的
只需要两个图片
如果直接使用深度学习代替建模的话应该 会更好

import numpy as np
import matplotlib.pyplot as plt
import cv2
# 假设这个是 两个图像的比值的一行
# 有偏振的图像 /没有偏振的图像


def gt_or_lt(i):
    return sum(i[1:] - i[:-1] > 0)


def compute_data(one):
    # 递增 递增   低 抬高  高 顺
    # 递增 递减   顺
    # 递减 递增  顺
    # 递减  递减   高  降低   低 顺
    one_list = []
    update_next_i = False
    for i, j in zip(one[:-1], one[1:]):
        if update_next_i:
            i = one_list[-1]
            update_next_i = not update_next_i
        if gt_or_lt(i):
            if gt_or_lt(j):
                if j[0] - i[-1] > 0:

                    one_list.append(j)
                else:
                    j += i[-1]

                    one_list.append(j)
                    update_next_i = not update_next_i
            else:

                one_list.append(j)
        else:
            if gt_or_lt(j):

                one_list.append(j)
            else:
                if j[0] - i[-1] > 0:
                    j = 0 - j

                    one_list.append(j)
                    update_next_i = not update_next_i
                else:

                    one_list.append(j)
    return [one[0]] + one_list
    # return  one_list


if __name__ == '__main__':
    one = cv2.imread("2.jpg")
    basic = cv2.imread("1.jpg")
    one = one[40:120, 400:480]
    basic = basic[40:120, 400:480]

    new_data = np.sum(one / basic, -1)

    x=[]
    y=[]
    z=[]
    x_index=0
    for one_data in new_data:

        one_data = one_data.reshape([-1, 1])


        one_data = compute_data(one_data)

        z.append(one_data)
        x.append([x_index]*len(one_data))
        y.append(list(range(len(one_data))))
        x_index+=1
        # plt.ion()
        # plt.plot(list(range(np.hstack(one_data).size)), np.hstack(one_data))
        # plt.show()
        # plt.pause(0.1)
        # plt.clf()
    ax=plt.axes(projection='3d')
    ax.plot3D(np.hstack(x),np.hstack(y),np.hstack(z).reshape(-1),'gray')
    plt.show()