Win8Metro(C#)数字图像处理--2.34直方图规定化
2024-08-23 20:27:43
原文:Win8Metro(C#)数字图像处理--2.34直方图规定化
[函数名称]
WriteableBitmap HistogramSpecificateProcess(WriteableBitmap src, WriteableBitmap dst)
[算法说明]
[函数代码]
/// <summary>
/// Histogram specification process.
/// </summary>
/// <param name="src">The source image.</param>
/// <param name="dst">The image to get histogram to use.</param>
/// <returns></returns>
public static WriteableBitmap HistogramSpecificateProcess(WriteableBitmap src, WriteableBitmap dst)////38图像直方图规定化
{
if (src != null)
{
int w = src.PixelWidth;
int h = src.PixelHeight;
byte[]histMap=HistogramMap(dst);
WriteableBitmap histImage = new WriteableBitmap(w, h);
byte[] temp = src.PixelBuffer.ToArray();
for (int i = 0; i < temp.Length; i += 4)
{
temp[i] = (byte)(255 * histMap[temp[i]]);
temp[i + 1] = (byte)(255 * histMap[temp[i+1]]);
temp[i + 2] = (byte)(255 * histMap[temp[i+2]]);
}
Stream sTemp = histImage.PixelBuffer.AsStream();
sTemp.Seek(0, SeekOrigin.Begin);
sTemp.Write(temp, 0, w * 4 * h);
return histImage;
}
else
{
return null;
}
}
public static byte[] HistogramMap(WriteableBitmap src)
{
if (src != null)
{
byte[] temp = src.PixelBuffer.ToArray();
byte gray;
int[] tempArray = new int[256];
int[] countPixel = new int[256];
byte[] pixelMap = new byte[256];
for (int i = 0; i < temp.Length; i += 4)
{
gray = (byte)(temp[i] * 0.114 + temp[i + 1] * 0.587 + temp[i + 2] * 0.299);
countPixel[gray]++;
}
for (int i = 0; i < 256; i++)
{
if (i != 0)
{
tempArray[i] = tempArray[i - 1] + countPixel[i];
}
else
{
tempArray[0] = countPixel[0];
}
pixelMap[i] = (byte)(255 * tempArray[i] * 4 / temp.Length + 0.5);
}
return pixelMap;
}
else
return null;
}
[图像效果]
<img src="http://img.blog.csdn.net/20150412104816739?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVHJlbnQxOTg1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
最新文章
- 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)
- 【原创】技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
- [JAVA] java class 基本定义 Note
- getElementsByClassName 兼容性
- mysql-5.7.17-winx64免安装版,win10环境下安装配置
- Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行?
- Leetcode: Number of Segments in a String
- Ubuntu 安装桌面且远程连接
- mmo设计
- 用httpPost对JSON发送和接收的例子
- C++算术运算符与算术表达式
- Python Celery队列
- Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
- 【程序员札记#学习&;&;塑形# 】2018年5月04号
- Win10下windows mobile设备中心连接不上的方法无法启动
- springboot创建错误
- beyondCompare工具使用
- 安装和使用iOS的包管理工具CocoaPods
- webstorm 连接svn
- Java 之字符串(7)