Example #1
0
        public double findMatchTSS(MyFilterData search, BitmapData refData, MyPlayer RefPlayer, ref int targetX, ref int targetY)
        {                                                    // 3 steps searcj
            matchRatePair dataRecord   = new matchRatePair(Double.PositiveInfinity, targetX, targetY);
            MyFilterData  refKernelGet = new MyFilterData(); // the data copy from ref frame of kernel size

            int x = targetX;
            int y = targetY;

            for (int stepLength = refData.Width / 4; stepLength > 0; stepLength /= 2)
            {
                //cc
                compareBlock(search, refData, RefPlayer, x, y, dataRecord);

                //lt
                compareBlock(search, refData, RefPlayer, x - stepLength, y - stepLength, dataRecord);
                //ct
                compareBlock(search, refData, RefPlayer, x, y - stepLength, dataRecord);
                //rt
                compareBlock(search, refData, RefPlayer, x + stepLength, y - stepLength, dataRecord);
                //lc
                compareBlock(search, refData, RefPlayer, x - stepLength, y, dataRecord);

                //rc
                compareBlock(search, refData, RefPlayer, x + stepLength, y, dataRecord);
                //ld
                compareBlock(search, refData, RefPlayer, x - stepLength, y + stepLength, dataRecord);
                //cd
                compareBlock(search, refData, RefPlayer, x, y + stepLength, dataRecord);
                //rd
                compareBlock(search, refData, RefPlayer, x + stepLength, y + stepLength, dataRecord);

                x = dataRecord.x;
                y = dataRecord.y;
            }
            targetX = dataRecord.x;
            targetY = dataRecord.y;
            return(dataRecord.rate);
        }
Example #2
0
        private void compareBlock(MyFilterData search, BitmapData refData, MyPlayer RefPlayer, int x, int y, matchRatePair dataRecord)
        {// compare the (x , y) similar rate && flash dataRecord & view
            if (!RefPlayer.flashIgnore)
            {
                RefPlayer.OnPlay(new MyPlayer.PlayEventArgs(-1, MyPlayer.PlayState.KEEP, x, y, compressKernelSize, compressKernelSize));
            }
            MyFilterData refKernelGet = new MyFilterData();

            refKernelGet.fill(refData, x, y, MyFilter.BorderMethod.ZERO, CompressKernel);
            double distance = MyFilterData.compare(search, refKernelGet, criteria);

            if (dataRecord > distance)
            {// find min distance
                dataRecord.rate = distance;
                dataRecord.x    = x;
                dataRecord.y    = y;
                if (!RefPlayer.flashIgnore)
                {
                    MyDeal.tryDraw(MatchViewer, refKernelGet.transToBitmap());
                }
            }
            Thread.Sleep(sleepTime);
        }
Example #3
0
        public double findMatchNormal(MyFilterData search, BitmapData refData, MyPlayer RefPlayer, ref int targetX, ref int targetY)
        {                                                     // 2D loorer methd if x,y < 0 ? all seach : local primary
            matchRatePair dataRecord    = new matchRatePair(Double.PositiveInfinity, 0, 0);
            MyFilterData  refKernelGet  = new MyFilterData(); // the data copy from ref frame of kernel size
            int           farDistance2  = 128;                //define half of this is mean the distance value from target is far
            int           nearDistance2 = 32;                 //define half of this is mean the distance value from target is near
            int           farJumpStap   = compressKernelSize; // define search pixel jump step lenth when seach in far area

            if ((targetX < 0) || (targetY < 0))
            {// search all pixels
                for (int y = 0 + compressKernelSize / 2; y < refData.Height; y += 1)
                {
                    for (int x = 0 + compressKernelSize / 2; x < refData.Width; x += 1)
                    {
                        if ((!RefPlayer.flashIgnore) && (x % 3 == 0))// reduce the reflash view frequence
                        {
                            RefPlayer.OnPlay(new MyPlayer.PlayEventArgs(-1, MyPlayer.PlayState.KEEP, x, y, compressKernelSize, compressKernelSize));
                        }
                        refKernelGet.fill(refData, x, y, MyFilter.BorderMethod.ZERO, CompressKernel);
                        double distance = MyFilterData.compare(search, refKernelGet, criteria);
                        if (dataRecord > distance)
                        {// find min distance
                            dataRecord.rate = distance;
                            dataRecord.x    = x;
                            dataRecord.y    = y;
                            if (!RefPlayer.flashIgnore)
                            {
                                MyDeal.tryDraw(MatchViewer, refKernelGet.transToBitmap());
                            }
                        }
                        Thread.Sleep(sleepTime);
                    }
                }
                targetX = dataRecord.x;
                targetY = dataRecord.y;
                return(dataRecord.rate);
            }
            else
            {//local primary
                // the far area  left & top posion
                int fx = targetX - farDistance2 / 2;
                int fy = targetY - farDistance2 / 2;
                // the near area posion
                int nl = targetX - nearDistance2 / 2;
                int nt = targetY - nearDistance2 / 2;
                int nr = targetX + nearDistance2 / 2;
                int nb = targetY + nearDistance2 / 2;

                int jumpStap = farJumpStap;
                for (int y = (fy < (0 + compressKernelSize / 2) ? (0 + compressKernelSize / 2) : fy); (y < refData.Height) && (y < fy + farDistance2); y += jumpStap)
                {
                    for (int x = (fx < (0 + compressKernelSize / 2) ? (0 + compressKernelSize / 2) : fx); (x < refData.Width) && (x < fx + farDistance2); x += jumpStap)
                    {
                        if ((x >= nl) && (x < nr) && (y >= nt) && (y < nb))
                        {// in near
                            jumpStap = 1;
                        }
                        else
                        {//in far
                            jumpStap = farJumpStap;
                        }
                        compareBlock(search, refData, RefPlayer, x, y, dataRecord);
                    }
                }
                targetX = dataRecord.x;
                targetY = dataRecord.y;
                return(dataRecord.rate);
            }
        }