private boolean _isHoles(byte[][] array, Point center, double r,
			   double holesBeginAlpha, double holesEndAlpha,
			   double deltaAlpha)
  {
    boolean isHoles = true;

    // Check the edge of hole on holesBegin and holeEnd and see if it is
    // surrounded by mask points beyond holeBegin and holeEnd
    int depth = (int) Math.floor( r + 5 + 0.5 );
    Point point0 = _getMaskEdgePoint(array, center, 
				     (holesBeginAlpha - deltaAlpha), depth);
    Point point1 = _getMaskEdgePoint(array, center, holesBeginAlpha, depth);
    if(point0 == null || point1 == null) return false;

    double dis1 = _getDistance(point0, point1);
    Point point2 = _getMaskEdgePoint(array, center, holesEndAlpha, depth);
    Point point3 = _getMaskEdgePoint(array, center,
				     (holesEndAlpha + deltaAlpha), depth );
    if(point2 == null || point3 == null) return false;
    double dis2 = _getDistance(point2, point3);

    // If both dis1 and dis2 are larger than GAP, it is not considered a hole
    double GAP = 5;
    if( dis1 >= GAP && dis2 >= GAP ) isHoles = false;

    // If both dis1 and dis2 are smaller than GAP, it is considered a hole
    else if (dis1 < GAP && dis2 < GAP ) isHoles = true;

    // If only one side is larger than GAP and the section covers over PI/2,
    // it is considered a hole
    else {
	if( (holesEndAlpha - holesBeginAlpha) > (Math.PI/2) ) isHoles = true;
	else isHoles = false;
    }
    return isHoles;
  }