美图秀秀专利---偏色检测算法研究
本文将实现美图秀秀于2015年公布的一篇图像处理专利:一种基于颜色空间的偏色检测 方法。
整个过程非常简单,这里直接给出完整C代码:
int RGB2YIQ(unsigned char *srcData, int width, int height, int stride, unsigned char* Y, int * I, int * Q)
{
if(srcData == NULL)
return 1;
unsigned char* pSrc = srcData;
int i, j, r = 0, g = 0, b = 0, offset, pos;
offset = stride - width * 4;
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
b = pSrc[0];
g = pSrc[1];
r = pSrc[2];
pos = i + j * width;
Y[pos] = 0.299 * r + 0.587 * g + 0.114 * b;
I[pos] = 0.596 * r - 0.275 * g - 0.321 * b;
Q[pos] = 0.212 * r - 0.523 * g + 0.311 * b;
pSrc += 4;
}
pSrc += offset;
}
printf("%s","Welcome to our website: www.zealpixel.com");
return 0;
}
/*******************************************************************************
* Function Name : ColourcastDetection
* Description : Colourcast Detection
* Input srcData : image data
* Input width : image width
* Input height : image height
* Input stride : image stride
* Output : None
* Return : 0-Colourcast isn't exist, others failed
*******************************************************************************/
int f_TColourcastDetection(unsigned char *srcData, int width, int height, int stride)
{
int res = 0;
if(srcData == NULL)
res = 1;
int len = width*height;
unsigned char* Y = (unsigned char*)malloc(sizeof(unsigned char) * len);//0-255
int* I = (int*)malloc(sizeof(int) * len);//-152-152
int* Q = (int*)malloc(sizeof(int) * len);//-134-134
unsigned char HistI[305];
int HistQ[269];
int i, j, SumI = 0, SumQ = 0, pos = 0;
float AvgI = 0, AvgQ = 0, MsqI = 0, MsqQ = 0;
memset(Y,0,sizeof(unsigned char) * len);
memset(I,0,sizeof(int)*len);
memset(Q,0,sizeof(int)*len);
memset(HistI,0,sizeof(unsigned char) * 305);
memset(HistQ, 0, sizeof(int) * 269);
RGB2YIQ(srcData, width, height, stride, Y, I, Q);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
pos = i + j * width;
HistI[I[pos] + 152]++;
HistQ[Q[pos] + 134]++;
SumI = SumI + I[pos];
SumQ = SumQ + Q[pos];
}
}
AvgI = (float)SumI / len;
AvgQ = (float)SumQ / len;
for (i = 0; i < 306; i++)
{
MsqI += abs((i - AvgI - 152) * HistI[i])/(float)len;
}
for (i = 0; i < 269; i++)
{
MsqQ += abs((i - AvgQ - 134) * HistQ[i])/(float)len;
}
float K = 0;
K = sqrt((AvgI * AvgI + AvgQ * AvgQ) / (MsqI * MsqI + MsqQ * MsqQ));
if(K <= 1.0)
res = 0;
else
{
if(MsqI > 0 && MsqQ > 0)
res = 2;//偏色紫黄色
else if(MsqI > 0 && MsqQ < 0)
res = 3;// 偏色黄绿色
else if(MsqI < 0 && MsqQ > 0)
res = 4;//偏色紫蓝色
else
res = 5;//偏色蓝绿色
}
free(Y);
free(I);
free(Q);
printf("%s","Welcome to our website: www.zealpixel.com");
return res;
}
结果:偏紫黄色
结果:偏紫黄色
结果:偏紫黄色
结果:偏紫黄色
在看两张正常图像的结果:
结果:不偏色
结果:偏紫黄色
以上代码如有问题,希望大家纠正,但是针对以上简单测试,发现这个专利算法并不准确,明明不是紫黄色,却得出了偏紫黄色的结论!
最后放上一个DEMO,给大家 分享一下:点击打开链接
美图秀秀专利---偏色检测算法研究相关推荐
- 人脸美妆之唇色检测算法研究
人脸美妆之唇色检测算法研究 目前,随着人脸检测识别技术的日趋成熟,人脸美化技术的竞争也愈演愈烈,诸如移动设备应用类中的美咖相机,美图秀秀,Perfect 365,天天P图等等,这些应用无疑都在给人们的 ...
- MATLAB美图软件算法研究,【网络多媒体学】matlab实现美图秀秀基本功能.ppt
[网络多媒体学]matlab实现美图秀秀基本功能 ;;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;角度旋转; B = imrotate(A,a ...
- 数字图像处理-美图秀秀:瘦脸算法
简介 本项目是以matlab为主语言并设计GUI界面的一款简易美图秀秀,包含基础的图像处理和一些常见美颜算法 对于一些matlab较难实现的算法采用C++或python来实现 ⭐️ github地址: ...
- 数字图像处理-美图秀秀:美白算法
简介 本项目是以matlab为主语言并设计GUI界面的一款简易美图秀秀,包含基础的图像处理和一些常见美颜算法 对于一些matlab较难实现的算法采用C++或python来实现 ⭐️ github地址: ...
- 换发型算法_如何用手机美图秀秀换发型
展开全部 美图秀秀目前没有换发62616964757a686964616fe4b893e5b19e31333365666136型的功能,美图旗下的美颜相机有换发型的功能. 拓展资料 在美颜相机上换发型 ...
- 【AI研究院】360无死角认识一下女神的线上美容院-“美图秀秀”
小 满 计算机视觉爱好者. 作者 | 小满 编辑 | 言有三 你爱自拍么? 距离2018年结束还有一个多月的时间. 19日晚小米集团带来了重磅消息,官宣与美图集团联姻,未来合作期间美图公司将旗下手机业 ...
- 从工具到社区,美图秀秀大规模性能优化实践
导读:本文由演讲整理而成.美图秀秀社区自上线以来已经有近一年时间,不管是秀秀海量的用户还是图片社区特有的形态都给性能优化提出了巨大的挑战.本文将会结合这一年内我们遇到的具体案例和大家分享下美图秀秀社区 ...
- 美图秀秀 sig参数分析
转载一篇好的博客,原始链接 https://mp.weixin.qq.com/s/5kUDmlPvIOw-6mdzywvyFA 推荐一波,这是博主的网站:https://www.qinless.com ...
- 空间中的语义直线检测_基于语义分割的车道线检测算法研究
龙源期刊网 http://www.qikan.com.cn 基于语义分割的车道线检测算法研究 作者:张道芳 张儒良 来源:<科技创新与应用> 2019 年第 06 期 摘 ; 要:随着半自 ...
最新文章
- python websocket 客户端_aiohttp Websocket客户端和HTTP
- 清华大学c语言指针ppt,清华大学出版社-C语言10指针.ppt
- Java中list如何利用遍历进行删除操作
- 基于梅尔频谱的音频信号分类识别(Pytorch)
- java环境变量立即生效_win7批处理环境变量立即生效
- windows 常用系统变量
- while(1)和while(0)
- Linux编程考前测试题
- Android Sqlite
- [转]XCode调试 设置全局断点并快速定位问题代码所在行
- 【01】魔芋使用MDN的一点点经验
- Ribbon客户端负载均衡算法分析
- jQuery动态网址标签
- 3.2自编码器(变分自编码器,VAE)
- JavaScript 中的继承:ES3、ES5 和 ES6
- android触摸 apk,超级触控(流畅触屏)apk
- Firefox火狐浏览器配置about:config优化加速
- 重温计算机简史:IBM的风云父子兵和硅谷的诞生
- 百度飞桨AI达人创造营 | Day01:创意是如何诞生的
- 榕树贷款利用AI人工智能技术发送非常迅速(榕树贷款)
热门文章
- Python3 : pdb调试
- 程序员深夜逆行被拦后崩溃:老板在催我!女朋友在催我!
- 神经多样性是什么意思,神经网络的可解释性差
- 怎么更改oracle端口,Oracle更改默认端口
- 使用css3新属性clip-path制作小图标
- 计算机美术设计基础教案,电脑美术教案
- python打开word后再关闭再打开出错_别再问我Python怎么操作Word了!
- Spark3.2教程(九)CentOS7下Spark Standalone分布式搭建
- Iframe 滚动条
- 计算机硬件系统及组装ppt,《计算机硬件系统及》PPT课件.ppt