#include "DialogCreateModel.h" DialogCreateModel::DialogCreateModel(QWidget *parent) : QDialog(parent) { ui.setupUi(this); setFixedSize(918, 543); ui.spin_AngleStart->setRange(-180, 180); ui.spin_AngleStart->setValue(0); ui.spin_AngleExtent->setRange(0, 360); ui.spin_AngleExtent->setValue(360); ui.spin_BrushSize->setValue(5); ui.spin_ScaleRMin->setSingleStep(0.1); ui.spin_ScaleRMin->setRange(0.5, 1.5); ui.spin_ScaleRMin->setValue(1.0); ui.spin_ScaleRMax->setSingleStep(0.1); ui.spin_ScaleRMax->setRange(0.5, 1.5); ui.spin_ScaleRMax->setValue(1.0); ////////////////////////////////////////////////////////////////////////// // 显示控件初始化 hwndUnit = new HWndUnit(this); Util::ShowUnitInWidget(ui.Image_widget, hwndUnit); m_pRoiController = new ROIController(); hwndUnit->getHWndCtrl()->useROIController(m_pRoiController); connect(m_pRoiController, SIGNAL(ROIChange(const ViewMessage)), this, SLOT(on_ROIChange(const ViewMessage))); ROIRect1* pRoi = new ROIRect1(); pRoi->setTitle("Model"); m_pRoiController->setROISign(ROIOperation::Negative); m_pRoiController->setROIShape(pRoi); m_pRoiController->mouseDownAction(500, 500); ROIPoint* pRoiPoint = new ROIPoint(); pRoiPoint->setTitle("Brush"); pRoiPoint->setHandleWidth(100); //m_pRoiController->setROISign(ROIOperation::Negative); m_pRoiController->setROIShape(pRoiPoint); m_pRoiController->mouseDownAction(500, 400); ////////////////////////////////////////////////////////////////////////// m_objModelBrush.GenEmptyObj(); } DialogCreateModel::~DialogCreateModel() { } void DialogCreateModel::UpdateData(bool bUiToVar) { if (bUiToVar) { m_nAngleStart = ui.spin_AngleStart->value(); m_nAngleExtent = ui.spin_AngleExtent->value(); m_fScaleRMin = ui.spin_ScaleRMin->value(); m_fScaleRMax = ui.spin_ScaleRMax->value(); } else { // ROI for (int i = 0 ; i < m_pRoiController->ROIList.size();i++ ) { m_pRoiController->setActiveROIidx(i); // if (m_pRoiController->getActiveROI()->getTitle() == "Model") // { // m_pRoiController->getActiveROI()->setROIData(m_hModelROIDate); // } if (m_pRoiController->getActiveROI()->getTitle() == "Brush") { m_pRoiController->getActiveROI()->setROIData(m_hModelBrushDate); } else { m_pRoiController->getActiveROI()->setROIData(m_hModelROIDate); } } /// ui.spin_AngleStart->setValue(m_nAngleStart); ui.spin_AngleExtent->setValue(m_nAngleExtent); ui.spin_ScaleRMin->setValue(m_fScaleRMin); ui.spin_ScaleRMax->setValue(m_fScaleRMax); } } void DialogCreateModel::showEvent(QShowEvent* event) { try { if (m_Image.IsInitialized()) { hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_objModelROI, qRgb(0, 255, 0)); hwndUnit->ShowObj(m_objModelBrush, qRgb(0, 255, 0)); hwndUnit->ShowObj(m_objTransContours, qRgb(255, 25, 25)); hwndUnit->Refresh(true); } } catch (...) { } } void DialogCreateModel::on_UpdateUI() { } /// /// 确定 /// void DialogCreateModel::on_btnOK_clicked() { UpdateData(); this->close(); } /// /// 取消按钮 /// void DialogCreateModel::on_btnCancel_clicked() { // 将本工具的恢复到打开工具之前的状态 this->close(); } /// /// /// /// void DialogCreateModel::on_ROIChange(const ViewMessage& sign) { hwndUnit->ShowImage(m_Image); switch (sign) { case ViewMessage::MovingROI: { ROI* roi = m_pRoiController->getActiveROI(); hv_roiDate = roi->getROIData(); if (roi->getTitle() == "Brush") { m_hModelBrushDate = hv_roiDate; HObject ho_Intersection; ho_Intersection.GenEmptyObj() ; int nBrushSize = ui.spin_BrushSize->value(); HObject hv_Brush; GenRectangle2(&hv_Brush, hv_roiDate[0], hv_roiDate[1], 0, nBrushSize , nBrushSize); Intersection(m_objModelROI, hv_Brush, &ho_Intersection); HTuple hv_Area, hv_Row, hv_Column; AreaCenter(ho_Intersection, &hv_Area, &hv_Row, &hv_Column); if (hv_Area.D() > 1) { Union2(m_objModelBrush, hv_Brush, &m_objModelBrush); Difference(m_objModelROI, m_objModelBrush, &m_objModelROI); } hwndUnit->ShowObj(m_objModelROI, QColor(0, 255, 0)); hwndUnit->ShowObj(m_objModelBrush, QColor(0, 255, 0)); hwndUnit->ShowObj(m_objTransContours, QColor(255, 25, 25)); } else { m_objModelBrush.GenEmptyObj(); GenRectangle1(&m_objModelROI, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]); m_hModelROIDate = hv_roiDate; } hwndUnit->Refresh(true); }break; case ViewMessage::UpdateROI: { CreateShapeModel(); }break; case ViewMessage::CreatedROI: { m_pRoiController->defineModelROI(); ROI* roi = m_pRoiController->getActiveROI(); hv_roiDate = roi->getROIData(); try { GenRectangle1(&m_objModelROI, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]); m_hModelROIDate = hv_roiDate; } catch (...) { } } break; default: break; } } void DialogCreateModel::CreateShapeModel() { try { hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_objModelROI, QColor(0, 255, 0)); hwndUnit->ShowObj(m_objModelBrush, QColor(0, 255, 0)); HObject ho_lateImage; ReduceDomain(m_Image, m_objModelROI, &ho_lateImage); m_nAngleStart = ui.spin_AngleStart->value(); m_nAngleExtent = ui.spin_AngleExtent->value(); m_fScaleRMin = ui.spin_ScaleRMin->value(); m_fScaleRMax = ui.spin_ScaleRMax->value(); ////////////////////////////////////////////////////////////////////////// //Matching 01: Create and train the shape model CreateGenericShapeModel(&m_tModelID); //Matching 01: set the model parameters SetGenericShapeModelParam(m_tModelID, "iso_scale_max", 1.1); SetGenericShapeModelParam(m_tModelID, "iso_scale_min", 0.9); SetGenericShapeModelParam(m_tModelID, "metric", "use_polarity"); TrainGenericShapeModel(ho_lateImage, m_tModelID); ////////////////////////////////////////////////////////////////////////// HObject ho_ModelContours; HTuple hv_ModelRegionArea; GetShapeModelContours(&ho_ModelContours, m_tModelID, 1); // //Matching 01: Get the reference position AreaCenter(m_objModelROI, &hv_ModelRegionArea, &m_hvOriginRow, &m_hvOriginColumn); VectorAngleToRigid(0, 0, 0, m_hvOriginRow, m_hvOriginColumn, 0, &m_hvHomMat2D); AffineTransContourXld(ho_ModelContours, &m_objTransContours, m_hvHomMat2D); HObject ho_Cross; GenCrossContourXld(&ho_Cross, m_hvOriginRow, m_hvOriginColumn, 80, 0); hwndUnit->ShowObj(ho_Cross, QColor(255, 0, 0)); hwndUnit->ShowObj(m_objTransContours, QColor(255, 25, 25)); hwndUnit->Refresh(true); } catch (...) { //qWarning() << "CreateScaledShapeModel Error"; hwndUnit->ShowMsg("CreateScaledShapeModel Error"); } }