public BoxCounting(Bitmap image, byte Thr)
        {
            sw = Stopwatch.StartNew();

            // 二値化
            Bitmap BinalyBitmap = (Bitmap)image.Clone();

            //FiFractal.BitmapConverter.ToneInverse(ref BinalyBitmap);
            FiFractal.BitmapConverter.Binalize(ref BinalyBitmap, Thr);

            // byte[,]配列化
            byte[,] BinalyArray = FiFractal.BitmapConverter.BitmapToByte2D(BinalyBitmap);

            // エラー処理
            if (BinalyArray.GetLength(0) != BinalyArray.GetLength(1))
            {
                throw new ArgumentException("BitmapサイズはWxHおなじにしてください");
            }

            // ボックスカウント 2^0 - 2^n < Width
            BoxCount(BinalyArray);

            // 最小二乗近似
            LMS = new FiFractal.LeastMeanSquare(this.Log2X, this.Log2Y);
            //LMS = new FiFractal.LeastMeanSquare(this.LogX, this.LogY);
            //LMS = new FiFractal.LeastMeanSquare(this.Log10X, this.Log10Y);


            // フラクタル次元Dを算出
            this.D = (-1) * LMS.a;

            // 時間計測完了
            sw.Stop();
        }
        /// <summary>
        /// コンストラクタ
        /// (注意) カウントする閾値は範囲を決めたほうがいい。直線になるとは限らない.
        /// </summary>
        /// <param name="GrayScale">グレースケール化したBitmap</param>
        public PixelCounting(Bitmap GrayScale)
        {
            sw = Stopwatch.StartNew();

            // byte[,]配列化
            byte[,] ByteArray = FiFractal.BitmapConverter.BitmapToByte2D(GrayScale);

            // エラー処理
            if (ByteArray.GetLength(0) != ByteArray.GetLength(1))
            {
                throw new ArgumentException("BitmapサイズはWxHおなじにしてください");
            }

            // ピクセルカウント 2^0 - 2^n < Width
            PixelCount(ByteArray);

            // 最小二乗近似
            LMS = new FiFractal.LeastMeanSquare(this.Log2X, this.Log2Y);

            // フラクタル次元Dを算出
            this.D = (-1) * LMS.a;

            // 時間計測完了
            sw.Stop();
        }