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(); }