博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法
阅读量:6670 次
发布时间:2019-06-25

本文共 2548 字,大约阅读时间需要 8 分钟。

原文:



[函数名称]

  部分彩色保留函数       WriteableBitmap PartialcolorProcess(WriteableBitmap src,int rValue,int gValue,int bValue)

[算法说明]

  这个算法有多种,可以基于RGBHSV等多种颜色空间来实现,本文介绍最简单的基于RGB颜色空间的彩色保留算法。

  对于我们需要保留的像素P(x,y),它的RGB值分别为R(x,y),G(x,y),B(x,y),各个分量之间的关系有如下几种:

  1--R>G>B;2R>B>G;3B>R>G;4B>G>R;5G>R>B;6G>B>R;

  对于当前像素f(x,y)

  如果该像素的RGB分量关系情况与P(x,y)像素的分量关系情况相同,则该像素颜色保留,否则,将该像素做灰度化处理。

  这样,就可以保留我们需要的颜色像素了。

 [函数代码]

///         /// Partial color process.        ///         /// The source image.        /// R channel of pixel.        /// G channel of pixel.         /// B channel of pixel.        /// 
public static WriteableBitmap PartialcolorProcess(WriteableBitmap src,int rValue,int gValue,int bValue)部分彩色 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap srcImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] tempMask = (byte[])temp.Clone(); int r = 0, g = 0, b = 0; int grayValue=0; for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { b = tempMask[i * 4 + j * w * 4]; g = tempMask[i * 4 + 1 + j * w * 4]; r = tempMask[i * 4 + 2 + j * w * 4]; if (((r > b && b > g && rValue > gValue && gValue > bValue) || (r > g && g > b && rValue > gValue && gValue > bValue) || (g > r && r > b && gValue > rValue && rValue > bValue) || (g > b && b > r && gValue > bValue && bValue > rValue) || (b > g && g > r && bValue > gValue && gValue > rValue) || (b > r && r > g && bValue > rValue && rValue > gValue))) { } else { grayValue = (int)((tempMask[i * 4 + j * w * 4] + tempMask[i * 4 + 1 + j * w * 4] + tempMask[i * 4 + 2 + j * w * 4]) / 3); temp[i * 4 + j * w * 4] = temp[i * 4 + 1 + j * w * 4] = temp[i * 4 + 2 + j * w * 4] = (byte)grayValue; } } } Stream sTemp = srcImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return srcImage; } else { return null; } }
你可能感兴趣的文章
Break和Continue的用法
查看>>
CMD命令
查看>>
Angular练习题
查看>>
backbone 学习之history
查看>>
【转】Unity3D运行时刻资源管理
查看>>
【Java】数组升序和降序
查看>>
Implement Trie (Prefix Tree)
查看>>
【佛法】由佛法观爱情与人生——一位居士对爱情、婚姻和家庭的体悟
查看>>
加速数组操作(Array)
查看>>
收集计算机分区信息,去除列中的重复值(Excel)(空行)
查看>>
Python抓取zabbix性能监控图
查看>>
JDBC进行数据库的--增--删--改--案例----纯代码
查看>>
纪录一个table元素里面的tr th td
查看>>
CF1076C Meme Problem 数学
查看>>
iml文件
查看>>
Python编码/文件读取/多线程
查看>>
自己写了一个弹出菜单,有间隙也可以
查看>>
数据的处理和特征工程
查看>>
DBMS_SCHEDULER CHAIN用法
查看>>
html之表格列标题<th>的使用...
查看>>