Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法
原文:Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法
[函数名称]
部分彩色保留函数 WriteableBitmap PartialcolorProcess(WriteableBitmap src,int rValue,int gValue,int bValue)
[算法说明]
这个算法有多种,可以基于RGB,HSV等多种颜色空间来实现,本文介绍最简单的基于RGB颜色空间的彩色保留算法。
对于我们需要保留的像素P(x,y),它的RGB值分别为R(x,y),G(x,y),B(x,y),各个分量之间的关系有如下几种:
1--R>G>B;2—R>B>G;3—B>R>G;4—B>G>R;5—G>R>B;6—G>B>R;
对于当前像素f(x,y):
如果该像素的RGB分量关系情况与P(x,y)像素的分量关系情况相同,则该像素颜色保留,否则,将该像素做灰度化处理。
这样,就可以保留我们需要的颜色像素了。
[函数代码]
/// <summary>
/// Partial color process.
/// </summary>
/// <param name="src">The source image.</param>
/// <param name="rValue">R channel of pixel.</param>
/// <param name="gValue">G channel of pixel.</param>
/// <param name="bValue">B channel of pixel.</param>
/// <returns></returns>
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;
}
}
Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法的更多相关文章
- Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法
原文:Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法 前面章节中介绍了二值图像的形态学算法,这里讲一下灰度图的形态学算法,主要是公式,代码略. 1,膨胀算法 2,腐蚀算法 3 ...
- Win8 Metro(C#)数字图像处理--2.65形态学轮廓提取算法
原文:Win8 Metro(C#)数字图像处理--2.65形态学轮廓提取算法 [函数名称] 形态学轮廓提取函数 WriteableBitmap Morcontourextract ...
- Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法
原文:Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法 [函数名称] 高斯平滑滤波器 GaussFilter(WriteableBitmap src,int r ...
- Win8 Metro(C#)数字图像处理--2.51图像统计滤波算法
原文:Win8 Metro(C#)数字图像处理--2.51图像统计滤波算法 [函数名称] 图像统计滤波 WriteableBitmap StatisticalFilter(Writeab ...
- Win8 Metro(C#)数字图像处理--2.44图像油画效果算法
原文:Win8 Metro(C#)数字图像处理--2.44图像油画效果算法 [函数名称] 图像油画效果 OilpaintingProcess(WriteableBitmap src ...
- Win8 Metro(C#)数字图像处理--2.47人脸红眼去除算法
原文:Win8 Metro(C#)数字图像处理--2.47人脸红眼去除算法 [函数名称] 红眼去除 RedeyeRemoveProcess(WriteableBitmap src) ...
- Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法
原文:Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法 [函数名称] 二值图像轮廓提取 ContourExtraction(WriteableBitm ...
- Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法
原文:Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法 [函数名称] 图像马赛克效果 MosaicProcess(WriteableBitmap src, i ...
- Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法
原文:Win8 Metro(C#)数字图像处理--2.35图像肤色检测算法 [函数名称] 肤色检测函数SkinDetectProcess(WriteableBitmap src) [算法说明] ...
随机推荐
- leveldb学习:skiplist
leveldb中的memtable仅仅是一个封装类,它的底层实现是一个跳表. 跳表是一种基于随机数的平衡数据结构.其它的平衡数据结构还有红黑树.AVL树.但跳表的原理比它们简单非常多.跳表有点像链表, ...
- Opencv 使用Stitcher类图像拼接生成全景图像
Opencv中自带的Stitcher类可以实现全景图像,效果不错.下边的例子是Opencv Samples中的stitching.cpp的简化,源文件可以在这个路径里找到: \opencv\sourc ...
- Watchdog机制概述
1. Watchdog初始 Watchdog的中文的“看门狗”,有保护的意思.最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正 ...
- HDU 1502 - dp + 压位
传送门 题目大意: 3*n的字符串,A.B.C分别有n个,w(X)代表X字母出现的次数,要求该字符串的所有前缀中w(A) >= w(B) >= w(C),问合法方案数有多少. 题目分析: ...
- 【23.24%】【codeforces 629C】Famil Door and Brackets
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Android Studio ERROR: x86 emulation currently requires hardware acceleration!报错解决傻瓜教程~
很早之前就碰到过Android Studio模拟器无法启动的问题,今天终于尝试去解决了下,下面将我解决的方法记录下. 模拟器报错信息为: emulator: ERROR: x86 emulation ...
- JDK里的设计模式(全)
下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:http://stackoverflow.com/questions/1673841/examples-of-g ...
- Configure Two DataSources ---
67. Data Access 67.1 Configure a DataSource To override the default settings just define a @Bean of ...
- Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合
Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...
- Delphi 中的字符串(还解释了shortstring)good
一.Delphi 2009 之前的字符串(不支持 Unicode): Delphi 2009 之前的字符串分为 3 种:ShortString.AnsiString.WideString. [Shor ...