首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone彩色图像分析

iPhone彩色图像分析
EN

Stack Overflow用户
提问于 2011-08-31 02:20:03
回答 1查看 1.2K关注 0票数 1

我正在寻找一些关于一种方法的想法,可以让我分析图像,并确定它是如何greenISH或brownISH或whiteISH的……我在这里强调ISH是因为,我对捕捉这些颜色的所有色调很感兴趣。到目前为止,我已经完成了以下工作:

我有我的UIImage,我有CGImageRef,我实际上有像素本身的颜色(它是RGB和Alpha),我不知道的是如何量化它,并确定所有的绿色色调,蓝色,棕色,黄色,紫色等等……所以,我可以处理每个像素,确定它是基本的RGB,但我需要一些帮助来量化它在整个图像上的颜色。

谢谢你的点子。亚历克斯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-31 02:54:30

一个相当好的解决方案是从RGB颜色空间切换到Y颜色空间之一,例如YUV、YCrCb或其中任何一个。在所有情况下,Y通道表示亮度,其他两个通道一起表示相对于亮度的颜色。您可能想要将亮度排除在外,可能需要注意的是,要排除低于某一特定暗度的所有颜色,因此单独获取Y本身是一个有用的第一步。

从RGB到YUV的转换是通过一个简单的线性组合实现的。直接来自维基百科和一千个其他来源:

代码语言:javascript
复制
y = 0.299*r + 0.587*g + 0.114*b;
u = -0.14713*r - 0.28886*g + 0.436*b;
v = 0.615*r - 0.51499*g - 0.10001*b;

假设您将r,g和b保持在0,1的范围内,您的第一个测试可能是:

代码语言:javascript
复制
if(y < 0.05)
{
    // this colour is very dark, so it's considered to be as
    // far as we allow from any colour we're interested in
}

为了确定你的颜色与绿色的接近程度,计算出你感兴趣的绿色的u和v分量,作为y的比例:

代码语言:javascript
复制
r = b = 0;
g = 0;

y = 0.299*r + 0.587*g + 0.114*b = 0.587;

u = -0.14713*r - 0.28886*g + 0.436*b = -0.28886;
v = 0.615*r - 0.51499*g - 0.10001*b  = -0.51499;

proportionOfU = u / y = -2.0479;
proportionOfV = v / y = -0.8773;

随后,计算并比较传入颜色的U和V的比例,并将其与您为要比较的颜色计算的比例进行比较(例如,使用2d平面距离)。越接近的值越相似。如何扩展和使用该指标取决于您的应用程序。

请注意,随着y趋于0,由于输入数据的范围有限,计算的比例会变得越来越不精确,并且当y为0时是未定义的。从概念上讲,这是因为当没有光线时,所有的颜色看起来都是完全一样的。检查y是否至少高于某个最小值是解决此问题的实用方法。这也意味着,如果你试图说“这张图片有多黑?”,你不会得到合理的结果,尽管这是因为没有反射任何光线的表面和没有任何光线落在上面的表面之间的模糊性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7247876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档