Win8Metro(C#)数字图像处理--2.29图像除法运算
2015-04-10 13:01
417 查看
[函数名称]
图像除法函数DivisionProcess(WriteableBitmap src, WriteableBitmap divSrc)
![](http://img.blog.csdn.net/20150410125956288?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVHJlbnQxOTg1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
[函数代码]
[函数名称]
图像除法函数DivisionProcess(WriteableBitmap src, WriteableBitmap divSrc)
[函数代码]
/// <summary> /// Division of two images. /// </summary> /// <param name="src">The frist source image.</param> /// <param name="divSrc">The second source image.</param> /// <returns></returns> public static WriteableBitmap DivisionProcess(WriteableBitmap src,WriteableBitmap divSrc)////29图像除法 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap divImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] divTemp = divSrc.PixelBuffer.ToArray(); byte[] dst = new byte[w * h * 4]; int r = 0, g = 0, b = 0, graySrc = 0, grayDiv = 0; for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { graySrc = temp[i * 4 + (h - 1 - j) * w * 4] + temp[i * 4 + 1 + (h - 1 - j) * w * 4] + temp[i * 4 + 2 + (h - 1 - j) * w * 4]; grayDiv = divTemp[i * 4 + (h - 1 - j) * w * 4] + divTemp[i * 4 + 1 + (h - 1 - j) * w * 4] + divTemp[i * 4 + 2 + (h - 1 - j) * w * 4]; if (grayDiv + graySrc != 0) { b = temp[i * 4 + (h - 1 - j) * w * 4] * (temp[i * 4 + (h - 1 - j) * w * 4] - divTemp[i * 4 + (h - 1 - j) * w * 4]) / (temp[i * 4 + (h - 1 - j) * w * 4] + divTemp[i * 4 + (h - 1 - j) * w * 4]); g = temp[i * 4 + 1 + (h - 1 - j) * w * 4] * (temp[i * 4 + 1 + (h - 1 - j) * w * 4] - divTemp[i * 4 + 1 + (h - 1 - j) * w * 4]) / (temp[i * 4 + 1 + (h - 1 - j) * w * 4] + divTemp[i * 4 + 1 + (h - 1 - j) * w * 4]); r = temp[i * 4 + 2 + (h - 1 - j) * w * 4] * (temp[i * 4 + 2 + (h - 1 - j) * w * 4] - divTemp[i * 4 + 2 + (h - 1 - j) * w * 4]) / (temp[i * 4 + 2 + (h - 1 - j) * w * 4] + divTemp[i * 4 + 2 + (h - 1 - j) * w * 4]); dst[i * 4 + j * w * 4] = (byte)(b > 0 ? (b < 255 ? b : 255) : 0); dst[i * 4 + 1 + j * w * 4] = (byte)(g > 0 ? (g < 255 ? g : 255) : 0); dst[i * 4 + 2 + j * w * 4] = (byte)(r > 0 ? (r < 255 ? r : 255) : 0); dst[i * 4 + 3 + j * w * 4] = 0; b = 0; g = 0; r = 0; } } } Stream sTemp = divImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(dst, 0, w * 4 * h); return divImage; } else { return null; } }
相关文章推荐
- Win8Metro(C#)数字图像处理--2.28图像乘法运算
- Win8Metro(C#)数字图像处理--2.24二值图像闭运算
- Win8Metro(C#)数字图像处理--2.27图像加法运算
- Win8Metro(C#)数字图像处理--2.23二值图像开运算
- Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测
- Win8Metro(C#)数字图像处理--2.15图像霓虹效果
- Win8Metro(C#)数字图像处理--2.3图像反色
- Win8Metro(C#)数字图像处理--2.6图像对比度调整
- Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
- Win8Metro(C#)数字图像处理--2.20图像垂直镜像
- Win8Metro(C#)数字图像处理--2.10图像中值滤波
- Win8Metro(C#)数字图像处理--2.33图像非线性变换
- Win8Metro(C#)数字图像处理--2.9图像均值滤波
- Win8Metro(C#)数字图像处理--2.30直方图均衡化
- Win8Metro(C#)数字图像处理--2.17图像木刻效果
- Win8Metro(C#)数字图像处理--2.21二值图像腐蚀
- Win8Metro(C#)数字图像处理--2.13Roberts边缘检测
- Win8Metro(C#)数字图像处理--2.32图像曝光算法
- Win8Metro(C#)数字图像处理--2.7图像伪彩色
- Win8Metro(C#)数字图像处理--2.18图像平移变换