原文: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="" />

最新文章

  1. 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)
  2. 【原创】技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
  3. [JAVA] java class 基本定义 Note
  4. getElementsByClassName 兼容性
  5. mysql-5.7.17-winx64免安装版,win10环境下安装配置
  6. Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行?
  7. Leetcode: Number of Segments in a String
  8. Ubuntu 安装桌面且远程连接
  9. mmo设计
  10. 用httpPost对JSON发送和接收的例子
  11. C++算术运算符与算术表达式
  12. Python Celery队列
  13. Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
  14. 【程序员札记#学习&amp;&amp;塑形# 】2018年5月04号
  15. Win10下windows mobile设备中心连接不上的方法无法启动
  16. springboot创建错误
  17. beyondCompare工具使用
  18. 安装和使用iOS的包管理工具CocoaPods
  19. webstorm 连接svn
  20. Java 之字符串(7)

热门文章

  1. css 弹性盒模型Flex 布局
  2. node转发formdata
  3. [React Router v4] Use Regular Expressions with Routes
  4. HDU2473 Junk-Mail Filter - 并查集删除操作(虚父节点)
  5. Nginx与真实IP
  6. Change Sudoers Mod 777 To 0440
  7. KVC设置系统自带属性,不管是不是私有的属性
  8. 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
  9. Scala入门到精通——第二十七节 Scala操纵XML
  10. 【b604】2K进制数