如何从图像中获取最大和最小强度值?
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;
}
您可以合并最后两个。
希望你明白了。
我正在尝试从名为 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;
}
您可以合并最后两个。
希望你明白了。