代码之家  ›  专栏  ›  技术社区  ›  user366312

如何将高斯高通核显示为位图?

  •  0
  • user366312  · 技术社区  · 6 年前

    如何转换 Gaussian High Pass kernel 为了显示的目的?

    我尝试了以下功能:

    1. 双精度到整数

      public static Bitmap ToBitmap(Array2d<double> image, PixelFormat pixelFormat)
      {
          Array2d<double> imageCopy = image.Copy();
      
          int Width = imageCopy.Width;
          int Height = imageCopy.Height;
      
          Bitmap bitmap = new Bitmap(Width, Height, pixelFormat);
      
          for (int y = 0; y < Height; y++)
          {
              for (int x = 0; x < Width; x++)
              {
                  double d = imageCopy[x, y];
      
                  int iii = Convert.ToInt32(d*255.0);
      
                  Color clr = Color.FromArgb(iii, iii, iii);
      
                  bitmap.SetPixel(x, y, clr);
              }
          }
      
          return bitmap;
      }
      
    2. 原木伸展 :

      public static Array2d<double> Stretch(Array2d<double> data)
      {
          int Width = data.Width;
          int Height = data.Height;
      
          Array2d<double> array2d = new Array2d<double>(Width, Height);
      
          for (int i = 0; i < Width; i++)
          {
              for (int j = 0; j < Height; j++)
              {
                  array2d[i, j] = Math.Log(data[i, j] + 1);
              }
          }
      
          return array2d;
      }
      

    他们两个似乎都没有工作,因为他们给出了以下例外:

    系统.Drawing.dll

    附加信息:“133028503”的值对“red”无效。 “red”应大于或等于0且小于或等于

    高斯核的样本数据如下:

    enter image description here

    有些值太低,有些值太高,无法转换为0-255范围内的整数。

    0 回复  |  直到 6 年前