如何从图像中获取最大和最小强度值?

How can i get the max and min intensity value from an image?

我正在尝试从名为 btm 的图像中获取最大强度值和最小强度值,以从 "max, min" 中获取平均值,然后使用该平均值作为阈值将图像转换为二进制图片。 所以我使用了 aforge 库中的直方图 class,它采用一个 int 数组,所以我试图将我的图像 btm 转换为数组,但是我用来转换图像的函数 ImageToByteArray return 字节数据类型的数组。

 System.Drawing.Image img = (System.Drawing.Image)btm;
 byte[] imgarr = ImageToByteArray(img);
 Histogram h = new Histogram(imgarr);
 int Maxval= h.max();
 int Minval= h.min();

.

    public static byte[] ImageToByteArray(System.Drawing.Image imageIn)
    {
        using (var ms = new MemoryStream())
        {
            imageIn.Save(ms, imageIn.RawFormat);
            return ms.ToArray();
        }
    }

我正在发布两个例程。您可以检查它们以了解如何完成您的任务。

第 1 步。将 Bitmap 转换为 int[,]

    public static int[,] ToInteger(Bitmap input)
    {
        //// We are presuming that the image is grayscale.
        //// A color image is impossible to convert to 2D.
        int Width = input.Width;
        int Height = input.Height;

        int[,] array2d = new int[Width, Height];

        for (int y = 0; y < Height; y++)
        {
            for (int x = 0; x < Width; x++)
            {
                Color cl = input.GetPixel(x, y);

                // image is Grayscale
                // three elements are averaged.
                int gray = (int)Convert.ChangeType(cl.R * 0.3 + cl.G * 0.59 + cl.B * 0.11, typeof(int));

                array2d[x, y] = gray;
            }
        }

        return array2d;
    }

第 2 步。搜索最大值和最小值。

    public int Max(int[,] values)
    {
        int max = 0;

        for (int i = 1; i < values.GetLength(0); i++)
        {
            for (int j = 1; j < values.GetLength(1); j++)
            {
                if (values[i,j] > 0)
                {
                    max = values[i, j];
                }
            }
        }

        return max;
    }

    public int Min(int[,] values)
    {
           ... ... ...
                if (values[i,j] < 0)
                {
                    min = values[i];
                }
           ... ... ...

        return min;
    }

您可以合并最后两个。

希望你明白了。