123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- #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()
- {
- }
- /// <summary>
- /// 确定
- /// </summary>
- void DialogCreateModel::on_btnOK_clicked()
- {
- UpdateData();
- this->close();
- }
- /// <summary>
- /// 取消按钮
- /// </summary>
- void DialogCreateModel::on_btnCancel_clicked()
- {
- // 将本工具的恢复到打开工具之前的状态
- this->close();
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="sign"></param>
- 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");
- }
- }
|