Ejemplo n.º 1
0
        static bool HilditchThinningAlg(int x, int y, bool[][] s)
        {
            bool p2 = s[x][y - 1];
            bool p3 = s[x + 1][y - 1];
            bool p4 = s[x + 1][y];
            bool p5 = s[x + 1][y + 1];
            bool p6 = s[x][y + 1];
            bool p7 = s[x - 1][y + 1];
            bool p8 = s[x - 1][y];
            bool p9 = s[x - 1][y - 1];

            int bp1 = ThinningHelper.NumberOfNonZeroNeighbors(x, y, s);

            if (bp1 >= 2 && bp1 <= 6) //2nd condition
            {
                if (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y, s) == 1)
                {
                    if (!((p2 && p4) && p8) | (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y - 1, s) != 1))
                    {
                        if (!((p2 && p4) && p6) | (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x + 1, y, s) != 1))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
        static bool WangZhangThinningAlg(int x, int y, bool[][] s)
        {
            // if (x > 0 && x < s.Length - 2 && y < s[0].Length - 1 && y > 1 && s[x][y])//bounds and 1st condition p1 = 1
            //   {
            bool p2 = s[x][y - 1];
            bool p3 = s[x + 1][y - 1];
            bool p4 = s[x + 1][y];
            bool p5 = s[x + 1][y + 1];
            bool p6 = s[x][y + 1];
            bool p7 = s[x - 1][y + 1];
            bool p8 = s[x - 1][y];
            bool p9 = s[x - 1][y - 1];

            int bp1 = ThinningHelper.NumberOfNonZeroNeighbors(x, y, s);

            if (bp1 >= 2 && bp1 <= 6)    //2nd condition
            {
                if ((ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y, s) == 1) | (p2 == false & p3 == false & p4 == false & p7 == false & p6 == true & p8 == true) | (p4 == false & p5 == false & p6 == false & p9 == false & p8 == true & p2 == true))
                {
                    if ((p2 == false & (p8 == false | p4 == false | p6 == false)) | (p4 == false & (p6 == false | p2 == false | p8 == false)))
                    {
                        return(true);
                    }
                }
            }

            // }
            return(false);
        }
        static bool ZhangWangThinningAlg(int x, int y, bool[][] s)
        {
            if (x > 0 && x < s.Length - 2 && y < s[0].Length - 1 && y > 1 && s[x][y])//bounds and 1st condition p1 = 1
            {
                bool p2 = s[x][y - 1];
                bool p3 = s[x + 1][y - 1];
                bool p4 = s[x + 1][y];
                bool p5 = s[x + 1][y + 1];
                bool p6 = s[x][y + 1];
                bool p7 = s[x - 1][y + 1];
                bool p8 = s[x - 1][y];
                bool p9 = s[x - 1][y - 1];

                int bp1 = ThinningHelper.NumberOfNonZeroNeighbors(x, y, s);

                if (bp1 >= 2 && bp1 <= 6)//2nd condition
                {
                    if (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y, s) == 1)
                    {
                        if (!((p2 && p4) && p8) || s[x][y - 2])
                        {
                            if (!((p2 && p4) && p6) || s[x + 2][y])
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
        static bool KwonWoongKangThinningThinningAlg(int x, int y, bool[][] s, bool even)
        {
            bool p2 = s[x][y - 1];
            bool p3 = s[x + 1][y - 1];
            bool p4 = s[x + 1][y];
            bool p5 = s[x + 1][y + 1];
            bool p6 = s[x][y + 1];
            bool p7 = s[x - 1][y + 1];
            bool p8 = s[x - 1][y];
            bool p9 = s[x - 1][y - 1];

            int bp1 = ThinningHelper.NumberOfNonZeroNeighbors(x, y, s);

            if (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y, s) == 1)
            {
                if (even)
                {
                    if (bp1 >= 3 && bp1 <= 6)
                    {
                        if (!((p2 && p4) && p8))
                        {
                            if (!((p2 && p6) && p8))
                            {
                                return(true);
                            }
                        }
                    }
                }
                else
                {
                    if (bp1 >= 2 && bp1 <= 6)
                    {
                        if (!((p2 && p4) && p6))
                        {
                            if (!((p4 && p6) && p8))
                            {
                                return(true);
                            }
                        }
                    }
                }
            }

            return(false);
        }
        static bool ArabicParallelThinningAlg(int x, int y, bool[][] s, int stepNo)
        {
            bool p2 = s[x][y - 1];
            bool p3 = s[x + 1][y - 1];
            bool p4 = s[x + 1][y];
            bool p5 = s[x + 1][y + 1];
            bool p6 = s[x][y + 1];
            bool p7 = s[x - 1][y + 1];
            bool p8 = s[x - 1][y];
            bool p9 = s[x - 1][y - 1];

            int bp1 = ThinningHelper.NumberOfNonZeroNeighbors(x, y, s);

            if (bp1 >= 2 && bp1 <= 6) //2nd condition
            {
                if (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y, s) == 1)
                {
                    if (stepNo == 1)
                    {
                        if (!((p2 && p4) && p6))
                        {
                            if (!((p4 && p6) && p8))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 2)
                    {
                        if (!((p2 && p6) && p8))
                        {
                            if (!((p4 && p6) && p8))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 3)
                    {
                        if (!((p2 && p4) && p8))
                        {
                            if (!((p2 && p6) && p8))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 4)
                    {
                        if (!((p2 && p4) && p6))
                        {
                            if (!((p2 && p4) && p8))
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
        static bool NovelImageThinningAlg(int x, int y, bool[][] s, int stepNo)
        {
            bool p2 = s[x][y - 1];
            bool p3 = s[x + 1][y - 1];
            bool p4 = s[x + 1][y];
            bool p5 = s[x + 1][y + 1];
            bool p6 = s[x][y + 1];
            bool p7 = s[x - 1][y + 1];
            bool p8 = s[x - 1][y];
            bool p9 = s[x - 1][y - 1];

            int bp1 = ThinningHelper.NumberOfNonZeroNeighbors(x, y, s);

            if (bp1 >= 2 && bp1 <= 6) //2nd condition
            {
                if (ThinningHelper.NumberOfZeroToOneTransitionFromP9(x, y, s) == 1)
                {
                    if (stepNo == 1)
                    {
                        if (!((p3 && p5) && p7))
                        {
                            if (!((p5 && p7) && p9))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 2)
                    {
                        if (!((p3 && p7) && p9))
                        {
                            if (!((p5 && p7) && p9))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 3)
                    {
                        if (!((p3 && p5) && p9))
                        {
                            if (!((p3 && p7) && p9))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 4)
                    {
                        if (!((p3 && p5) && p7))
                        {
                            if (!((p3 && p5) && p9))
                            {
                                return(true);
                            }
                        }
                    }

                    if (stepNo == 5)
                    {
                        if ((p2 && p9 && p7) & !p4)
                        {
                            if ((p4 && p5 && p7) & !p2)
                            {
                                if ((p6 && p7 && p9) & !p4)
                                {
                                    if ((p5 && p7 && p8) & !p2)
                                    {
                                        return(true);
                                    }
                                }
                            }
                        }
                    }

                    /*
                     * if (stepNo == 1)
                     *  if (!((p2 && p4) && p6))
                     *  {
                     *      if (!((p4 && p6) && p8))
                     *      {
                     *          return true;
                     *      }
                     *  }
                     *
                     * if (stepNo == 2)
                     *  if (!((p2 && p6) && p8))
                     *  {
                     *      if (!((p4 && p6) && p8))
                     *      {
                     *          return true;
                     *      }
                     *  }
                     *
                     * if (stepNo == 3)
                     *  if (!((p2 && p4) && p8))
                     *  {
                     *      if (!((p2 && p6) && p8))
                     *      {
                     *          return true;
                     *      }
                     *  }
                     *
                     * if (stepNo == 4)
                     *  if (!((p2 && p4) && p6))
                     *  {
                     *      if (!((p2 && p4) && p8))
                     *      {
                     *          return true;
                     *      }
                     *  }
                     *
                     * if (stepNo == 5)
                     *  if ((p9 && p8 && p6) & !p3)
                     *  {
                     *      if ((p3 && p4 && p6) & !p9)
                     *      {
                     *          if ((p5 && p6 && p8) & !p3)
                     *          {
                     *              if ((p4 && p6 && p7) & !p9)
                     *              {
                     *                  return true;
                     *              }
                     *          }
                     *
                     *      }
                     *  }*/
                }
            }
            return(false);
        }