您的位置:首页 > 其它

数字图像处理1:直方图均衡

2017-10-11 16:50 489 查看


L = 256 为 图像的灰度级数

private Color Color2Gray(Color color)
{
byte dGray = (byte)(0.30 * color.R + 0.59 * color.G + 0.11 * color.B);
return Color.FromArgb(0xff, dGray, dGray, dGray);
}

/// <summary>
/// 直方图均衡
/// </summary>
private void zhifangjunheng_Tapped(object sender, TappedRoutedEventArgs e)
{
var imgArr = bitmap.GetPixelColors();
//原始图像的直方图
double[] src = new double[256];
//归一化直方图均衡
double[] target = new double[256];
//纪录各个灰度级的数量
int[] temp = new int[256];
byte[] targetgray = new byte[256];
//灰度处理并统计各个灰度级的数量
for (int n = 0; n < imgArr.Length ; n++)
{
Color gray = Color2Gray(imgArr
);
imgArr
= gray;
temp[gray.R]++;
}//计算直方均衡
for (int k = 0; k < 256; k++)
{
//原始图像的直方图
src[k] = temp[k] / (double)imgArr.Length;
//归一化直方图均衡
for (int i = 0; i <= k; i++)
{
target[k] += src[i];
}
double gray = target[k] * 255;
if (gray < 0) gray = 0;
if (gray > 255) gray = 255;
targetgray[k] = (byte)(gray+0.5);
}for (int n = 0; n < imgArr.Length; n++)
{
byte gray = targetgray[imgArr
.R];
imgArr
= Color.FromArgb(0xff, gray, gray, gray);
}
bitmap = CanvasBitmap.CreateFromColors(canCtrl, imgArr, (int)bitmap.Size.Width, (int)bitmap.Size.Height, 96);
canCtrl.Invalidate();
}


canCtrl 为UWP WIN2D的CanvasControl控件
CanvasBitmap bitmap;

原图



处理后



直方均衡处理在暗区域密集处有马赛克
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: