编写一款2D CAD/CAM软件(十)视图拖拽

一般视图操作是通过按压鼠标滚轮拖动实现视图的平移操作。

数学模型

平移的仿射变换是最简单的变换操作。

  1. 假设几何图形坐标系原点在视图坐标系下坐标为Pgeo(Xgeo, Ygeo);
  2. 鼠标拖拽产生的移动向量在视图坐标系下表示为(Xview_delta, Yview_delta),可简单理解为鼠标移动的像素数目;
  3. 求:拖拽后几何图形坐标系原点在视图坐标系坐标Pgeo_new(Xgeo_new, Ygeo_new).
Xgeo_new = Xgeo + Xview_delta

Ygeo_new = Ygeo + Yview_delta

更新

Xgeo= Xgeo + Xview_delta

Ygeo = Ygeo + Yview_delta

视图实现

  /// j-view.h

    QPoint mouse_pos_;
    bool is_dragging_ = false;

  /// j-view.cpp

    void JView::mousePressEvent(QMouseEvent *e) {
        if (e->button() == Qt::MidButton) {
            is_dragging_ = true;
        }
    }

    void JView::mouseReleaseEvent(QMouseEvent *e) {
        if (e->button() == Qt::MidButton) {
            is_dragging_ = false;
        }
    }

    void JView::mouseMoveEvent(QMouseEvent *e) {
        auto pos = e->pos();
        auto delta
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了提取PET/CT影像特征,我们可以使用深度学习模型,例如卷积神经网络(CNN)和自编码器(Autoencoder)等。这里我将为您提供一个使用CNN提取PET/CT影像特征的Python程序示例。 首先,我们需要导入必要的库: ```python import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from tensorflow.keras.models import Sequential ``` 接下来,我们需要加载PET/CT影像数据集。这里假设您已经准备好了数据,并且它们被存储在名为“data.npy”和“labels.npy”的文件中。您可以使用以下代码读取它们: ```python data = np.load('data.npy') labels = np.load('labels.npy') ``` 然后,我们需要对数据进行预处理,包括对像素值进行归一化和将数据分为训练集和测试集: ```python # 归一化数据 data = data / 255.0 # 将数据分为训练集和测试集 split = int(0.8 * len(data)) train_data, test_data = data[:split], data[split:] train_labels, test_labels = labels[:split], labels[split:] ``` 现在,我们可以构建CNN模型。这里我们使用3个卷积层和2个全连接层构建模型: ```python model = Sequential([ Conv2D(16, (3,3), activation='relu', input_shape=(256, 256, 1)), MaxPooling2D(2,2), Conv2D(32, (3,3), activation='relu'), MaxPooling2D(2,2), Conv2D(64, (3,3), activation='relu'), MaxPooling2D(2,2), Flatten(), Dense(512, activation='relu'), Dense(1, activation='sigmoid') ]) ``` 在模型构建后,我们需要编译它并训练它: ```python model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.fit(train_data, train_labels, validation_data=(test_data, test_labels), epochs=10) ``` 最后,我们可以使用模型提取PET/CT影像特征。这里我们使用模型的倒数第二层作为特征提取器: ```python feature_extractor = tf.keras.Model(inputs=model.inputs, outputs=model.layers[-2].output) features = feature_extractor(data) ``` 完整的程序示例如下: ```python import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from tensorflow.keras.models import Sequential # 加载数据 data = np.load('data.npy') labels = np.load('labels.npy') # 归一化数据 data = data / 255.0 # 将数据分为训练集和测试集 split = int(0.8 * len(data)) train_data, test_data = data[:split], data[split:] train_labels, test_labels = labels[:split], labels[split:] # 构建模型 model = Sequential([ Conv2D(16, (3,3), activation='relu', input_shape=(256, 256, 1)), MaxPooling2D(2,2), Conv2D(32, (3,3), activation='relu'), MaxPooling2D(2,2), Conv2D(64, (3,3), activation='relu'), MaxPooling2D(2,2), Flatten(), Dense(512, activation='relu'), Dense(1, activation='sigmoid') ]) # 编译模型并训练 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.fit(train_data, train_labels, validation_data=(test_data, test_labels), epochs=10) # 提取特征 feature_extractor = tf.keras.Model(inputs=model.inputs, outputs=model.layers[-2].output) features = feature_extractor(data) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值