您当前的位置: 首页 > 

星夜孤帆

暂无认证

  • 0浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

拼接单个分叉

星夜孤帆 发布时间:2018-11-19 18:13:43 ,浏览量:0

import tensorflow as tf
import scipy.io as sio
import numpy as np
from PIL import Image
import os 
import copy
import math
import matplotlib.pyplot as plt
np.set_printoptions(threshold=np.inf) #输出全部矩阵不带省略号
#######################################################################
data = np.load('data/class_data.npy')
print(data.shape)
# np.random.shuffle(data)
######################################################################
# 将数据与标签分离,并对标签进行one_hot编码
def input_data(finaldata):
  data = []
  label = []
  for i in range(len(finaldata)):
    data.append(finaldata[i][0])
    label.append(finaldata[i][1])
  data = np.array(data)
  data = data.reshape(-1,16,16,1)
  label = np.array(label)
  
  return data, label
###########################################################################
def manage_data(data):
      data = data.reshape(-1,16,16)
      manage_data = []
      data = data.tolist()
      for i in range(len(data)):
          zhu_x = data[i][4]
          zuo_x = data[i][5]
          you_x = data[i][6]
          zhu_y = data[i][7]
          zuo_y = data[i][8]
          you_y = data[i][9]
          zhu_diam = data[i][10]
          zuo_diam = data[i][11]
          you_diam = data[i][12]
          x0_mean = (zhu_x[0] + zuo_x[0] + you_x[0]) / 3.
          y0_mean = (zhu_y[0] + zuo_y[0] + you_y[0]) / 3.
          zhu_x[0] = x0_mean
          zuo_x[0] = x0_mean
          you_x[0] = x0_mean
          zhu_y[0] = y0_mean
          zuo_y[0] = y0_mean
          you_y[0] = y0_mean
          fencha = [zhu_x] + [zuo_x] + [you_x] + [zhu_y] + [zuo_y] + [you_y] + [zhu_diam] + [zuo_diam] + [you_diam] 
          manage_data.append(fencha)
      manage_data = np.array(manage_data)
      return manage_data
##############################################################################
# 训练集
data_train, label_train = input_data(data)
data = manage_data(data_train)
# data = data[0:10,:,:]
print(data.shape)
# 距离计算公式
def get_len(x1,x2,y1,y2):
    diff_x = (x1-x2)**2
    diff_y = (y1-y2)**2
    length = np.sqrt(diff_x+diff_y)
    return length
# 得到管径值,管径在第一个值
def get_diam(fencha):
  zhu_diam = fencha[6][0]
  zuo_diam = fencha[7][0]
  you_diam = fencha[8][0]
  return zhu_diam, zuo_diam, you_diam
# 计算端点长度
def get_duandian_len(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y):
    #主分支头尾坐标
    zhu_x_tou = zhu_x[0]
    zhu_y_tou = zhu_y[0]
    zhu_x_wei = zhu_x[-1]
    zhu_y_wei = zhu_y[-1]
    #左分支头尾坐标
    zuo_x_tou = zuo_x[0]
    zuo_y_tou = zuo_y[0]
    zuo_x_wei = zuo_x[-1]
    zuo_y_wei = zuo_y[-1]
    #右分支头尾坐标
    you_x_tou = you_x[0]
    you_y_tou = you_y[0]
    you_x_wei = you_x[-1]
    you_y_wei = you_y[-1]
    #主分支端点长
    zhu_duan_len = get_len(zhu_x_tou,zhu_x_wei,zhu_y_tou,zhu_y_wei)
    #左分支端点长
    zuo_duan_len = get_len(zuo_x_tou,zuo_x_wei,zuo_y_tou,zuo_y_wei)
    #右分支端点长
    you_duan_len = get_len(you_x_tou,you_x_wei,you_y_tou,you_y_wei)
    return zhu_duan_len,zuo_duan_len,you_duan_len
#计算分支总长度
def get_total_len(zhu_x,zhu_y,zuo_x,zuo_y,you_x,you_y):
    zhu_lin_list = []
    zuo_lin_list = []
    you_lin_list = []
    for i in range(1,len(zhu_x)):
        zhu_lin_len = get_len(zhu_x[i-1],zhu_x[i],zhu_y[i-1],zhu_y[i])
        zhu_lin_list.append(zhu_lin_len)
    for i in range(1,len(zuo_x)):
        zuo_lin_len = get_len(zuo_x[i-1],zuo_x[i],zuo_y[i-1],zuo_y[i])
        zuo_lin_list.append(zuo_lin_len)
    for i in range(1, len(you_x)):
        you_lin_len = get_len(you_x[i-1],you_x[i],you_y[i-1],you_y[i])
        you_lin_list.append(you_lin_len)
    zhu_total_len = 0
    for file in zhu_lin_list:
        zhu_total_len += file
    zuo_total_len = 0
    for file in zuo_lin_list:
        zuo_total_len += file
    you_total_len = 0
    for file in you_lin_list:
        you_total_len += file
    return zhu_total_len,zuo_total_len,you_total_len
# 计算卷曲度
def get_juanqu(zhu_duan_len,zuo_duan_len,you_duan_len,zhu_total_len,zuo_total_len,you_total_len):
    zhu_juanqu = zhu_total_len / zhu_duan_len
    zuo_juanqu = zuo_total_len / zuo_duan_len
    you_juanqu = you_total_len / you_duan_len
#     print(zhu_total_len)
#     print(zhu_duan_len)
#     print(zhu_juanqu)
    return zhu_juanqu,zuo_juanqu,you_juanqu
def plt_fencha(data,label='red'):
  zhu_x = data[0]
  zuo_x = data[1]
  you_x = data[2]
  zhu_y = data[3]
  zuo_y = data[4]
  you_y = data[5]
  if label=='red':
    plt.plot(zhu_x,zhu_y,color='red',linewidth=3)
  if label=='blue':
    plt.plot(zhu_x,zhu_y,color='blue',linewidth=3)
  if label == 'green':
    plt.plot(zhu_x,zhu_y,color='green',linewidth=3)
  plt.plot(zuo_x,zuo_y,color='black',linewidth=3)
  plt.plot(you_x,you_y,color='black',linewidth=3)
  plt.xlim(-0.8,1.5)
  plt.ylim(-0.8,1.5)
  plt.xticks(np.arange(-0.8,1.5,0.2))
  plt.yticks(np.arange(-0.8,1.5,0.2))
  
# 去掉一个分叉的每个分支
def get_fencha(data):
  zhu_x = data[0]
  zuo_x = data[1]
  you_x = data[2]
  zhu_y = data[3]
  zuo_y = data[4]
  you_y = data[5]
  zhu_diam = [data[6]]
  zuo_diam = [data[7]]
  you_diam = [data[8]]
  return zhu_x,zuo_x,you_x,zhu_y,zuo_y,you_y,zhu_diam,zuo_diam,you_diam
segment = 'zhu' # 'zuo','you'
# 得到每个分叉结点坐标
def get_node(data,segment):
  if segment == 'zhu':
    nodeStartX = data[0][0]
    nodeEndX = data[0][-1]
    nodeStartY = data[3][0]
    nodeEndY = data[3][-1]
  if segment == 'zuo':
    nodeStartX = data[1][0]
    nodeEndX = data[1][-1]
    nodeStartY = data[4][0]
    nodeEndY = data[4][-1]
  if segment == 'you':
    nodeStartX = data[2][0]
    nodeEndX = data[2][-1]
    nodeStartY = data[5][0]
    nodeEndY = data[5][-1]
  return nodeStartX,nodeStartY,nodeEndX,nodeEndY
# 得到 第二个结点和倒数第二个结点
def get_other_node(data,segment):
  if segment == 'zhu':
    nodeStartX = data[0][0]
    nodeTwoX = data[0][1]
    nodeLastTwoX = data[0][-2]
    nodeStartY = data[3][0]
    nodeTwoY = data[3][1]
    nodeLastTwoY = data[3][-2]
  if segment == 'zuo':
    nodeStartX = data[1][0]
    nodeTwoX = data[1][1]
    nodeLastTwoX = data[1][-2]
    nodeStartY = data[4][0]
    nodeTwoY = data[4][1]
    nodeLastTwoY = data[4][-2]
  if segment == 'you':
    nodeStartX = data[2][0]
    nodeTwoX = data[2][1]
    nodeLastTwoX = data[2][-2]
    nodeStartY = data[5][0]
    nodeTwoY = data[5][1]
    nodeLastTwoY = data[5][-2]
  return nodeStartX,nodeStartY,nodeTwoX,nodeTwoY,nodeLastTwoX,nodeLastTwoY

# # 得到 第二个结点和倒数第二个结点
# def get_other_node(data,segment):
#   if segment == 'zhu':
#     nodeStartX = data[0][0]
#     nodeTwoX = data[0][2]
#     nodeLastTwoX = data[0][-3]
#     nodeStartY = data[3][0]
#     nodeTwoY = data[3][2]
#     nodeLastTwoY = data[3][-3]
#   if segment == 'zuo':
#     nodeStartX = data[1][0]
#     nodeTwoX = data[1][2]
#     nodeLastTwoX = data[1][-3]
#     nodeStartY = data[4][0]
#     nodeTwoY = data[4][2]
#     nodeLastTwoY = data[4][-3]
#   if segment == 'you':
#     nodeStartX = data[2][0]
#     nodeTwoX = data[2][2]
#     nodeLastTwoX = data[2][-3]
#     nodeStartY = data[5][0]
#     nodeTwoY = data[5][2]
#     nodeLastTwoY = data[5][-3]
#   return nodeStartX,nodeStartY,nodeTwoX,nodeTwoY,nodeLastTwoX,nodeLastTwoY
# 将两个分叉移动到结点相同位置
def remove_fencha(data1,data2,segment):
  #  以data1为固定分叉,data2往上拼接
  nodeStartX1,nodeStartY1, _, _ = get_node(data1,segment)
  _, _, nodeEndX2,nodeEndY2 = get_node(data2,segment)
  disc_x = nodeEndX2 - nodeStartX1
  disc_y = nodeEndY2 - nodeStartY1
  copyData2 = copy.deepcopy(data2)
  copyData2[0:3] = copyData2[0:3] - disc_x
  copyData2[3:6] = copyData2[3:6] - disc_y
  removeData = copyData2
  return removeData
# 拼接图像
sample = data[6]
# 计算结点与x正半轴夹角
def get_angles(startNodeX,startNodeY,endNodeX,endNodeY):
  # 以点startNodeX,startNodeY为原点不能随意反转他们的顺序
  if endNodeX>=startNodeX and endNodeY>=startNodeY:
    angle = math.degrees(np.arctan(abs(endNodeY-startNodeY)/abs(endNodeX-startNodeX)))
  if endNodeX=startNodeY:
    angle = math.degrees(np.arctan(abs(endNodeY-startNodeY)/abs(endNodeX-startNodeX)))
    angle = 180 - angle
  if endNodeX            
关注
打赏
1636984416
查看更多评论
0.0551s