コード例 #1
0
ファイル: Distance.cs プロジェクト: ondister/Recog
 /// <summary>
 /// Инициализирует новый объект дистанции на основе класса
 /// </summary>
 /// <param name="marker">Маркер от которого считаем дистанцию</param>
 /// <param name="onx">Дистанция по оси X  в пикселях</param>
 /// <param name="ony">Дистанция по оси Y в пикселях</param>
 public Distance(Marker marker, double onx, double ony)
 {
     _marker = marker;
     _onx = onx;
     _ony = ony;
     _getscenterofgravity = new Point();
 }
コード例 #2
0
ファイル: Canvas.cs プロジェクト: ondister/Recog
        private void RecognizeMarkers(List<Marker> markers)
        {
            if (markers.Count < 5)
            {
                throw new Exception("Число распознанных маркеров  меньше 5. Бланк не читаем.");
            }
            else
            {

                _markers = markers;
                _tcmarker = markers.FirstOrDefault(marker => marker.Blob.Fullness == markers.Max(newmark => newmark.Blob.Fullness));
                if (_tcmarker != null)
                {
                    _markers.Remove(_tcmarker);
                    _tcmarker.Type = MarkerType.TopCenter;
                }

            }
        }
コード例 #3
0
ファイル: Canvas.cs プロジェクト: ondister/Recog
        private void FindMarkers()
        {
            //

            List<Marker> lefts = new List<Marker>();
            List<Marker> rights = new List<Marker>();
            foreach (Marker marker in _markers)
            {
                if (marker.Blob.CenterOfGravity.X < _tcmarker.Blob.CenterOfGravity.X)
                { lefts.Add(marker); }
                else
                { rights.Add(marker); }
            }

            _tlmarker = lefts.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == lefts.Min(newmark => newmark.Blob.CenterOfGravity.Y));
            _blmarker = lefts.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == lefts.Max(newmark => newmark.Blob.CenterOfGravity.Y));
            _trmarker = rights.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == rights.Min(newmark => newmark.Blob.CenterOfGravity.Y));
            _brmarker = rights.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == rights.Max(newmark => newmark.Blob.CenterOfGravity.Y));
        }
コード例 #4
0
ファイル: Canvas.cs プロジェクト: ondister/Recog
        private void FindCenterMarker()
        {
            List<Marker> _blobs = new List<Marker>();
            //блокируем изображение в памяти
            BitmapData bitmapData = _markersimg.LockBits(
                new Rectangle(0, 0, _markersimg.Width, _markersimg.Height),
                ImageLockMode.ReadWrite, _markersimg.PixelFormat);

            BlobCounter blobCounter = new BlobCounter();
            blobCounter.FilterBlobs = true;
            //устанавливаем фильтр и максимальные и минимальные размеры маркера
            blobCounter.MinHeight = blobCounter.MinWidth = Geometry.MMtoPX(_makerdiameter - 2.0d, _image.VerticalResolution);
            blobCounter.MaxHeight = blobCounter.MaxWidth = Geometry.MMtoPX(_makerdiameter + 3.0d, _image.VerticalResolution);

            //собственно поиск
            blobCounter.ProcessImage(bitmapData);
            Blob[] blobs = blobCounter.GetObjectsInformation();
            _markersimg.UnlockBits(bitmapData);

            for (int i = 0, n = blobs.Length; i < n; i++)
            {

                if (blobs[i].Fullness > 0.3)
                {

                    Marker tempmark = new Marker(blobs[i]);
                    _blobs.Add(tempmark);

                }
            }
            this.RecognizeMarkers(_blobs);
        }
コード例 #5
0
ファイル: Distance.cs プロジェクト: ondister/Recog
 /// <summary>
 /// Добавляет новую дистанцию в коллекцию
 /// </summary>
 /// <param name="marker">Маркер</param>
 /// <param name="XpositionOnImage">Координата X центра ячейки на изображении</param>
 /// <param name="YpositionOnImage">Координата Y центра ячейки на изображении</param>
 public void Add(Marker marker, int XpositionOnImage, int YpositionOnImage)
 {
     _xpositiononimage = XpositionOnImage;
     _ypositiononimage = YPositionOnImage;
     this.Add(marker, XpositionOnImage - marker.Blob.CenterOfGravity.X, YpositionOnImage - marker.Blob.CenterOfGravity.Y);
 }
コード例 #6
0
ファイル: Distance.cs プロジェクト: ondister/Recog
 /// <summary>
 ///Добавляет новую дистанцию в коллекцию
 /// </summary>
 /// <param name="marker">Маркер</param>
 /// <param name="onx">Расстояние по оси X  в пикселях</param>
 /// <param name="ony">Расстояние по оси Y  в пикселях</param>
 public void Add(Marker marker, double onx, double ony)
 {
     Distance nd = new Distance(marker, onx, ony);
     _distanses.Add(nd);
 }