如何量化一张图片的色彩关系?

点击加入mixlab社区

15000+跨学科人群,机器学习、机器视觉、自然语言处理、知识图谱、量化交易、物联网、区块链、产品经理、交互设计、建筑设计、服装设计、珠宝设计、平面设计、音乐、艺术等。

上一期讲到Brandmark提出了一种表达色彩比例及关系的数据结构,无向色彩节点图,见下图:

本文详细介绍这一表达方式,及相关的实现代码。

阅读难度:★★★☆☆

技能要求:JS基础、数学基础

字数:800字

阅读时长:4分钟

我们先了解下何为Color quantization?

中文为色彩量化(点击查看详情介绍)。

色彩量化简单来说,就是压缩颜色,使颜色可以量化的一种方法。这听起来是不是类似于之前介绍过的MCCQ算法?没错,MCCQ就是色彩量化中的一种算法。Brandmark采用的色彩量化库是RgbQuant.js库,然后通过图(无向色彩节点图)的方式表达。通过以下几步:

STEP1

量化图片

通过RgbQuant.js库来获取图片的色彩量化结果,这里示例获取的是3个色彩数据来压缩图片。

quantized = colorgraph.quantize(img,num,use_mode)

获得结果,包括压缩色彩后的图片及色板。

STEP2

获取色彩矩阵

(无向色彩节点图的数学表示)

adjacency = colorgraph.get_connectivity_matrix(quantized.palette, quantized.canvas, normalize)

思考下如何用计算机语言表示图?如下图:

节点跟节点之间连线的称之为“”。

答案点击查看

计算邻接矩阵:

STEP2.1

初始化邻接矩阵

STEP2.2

遍历量化后的图片

STEP2.3

更新邻接矩阵

上图的过程,我们用文字描述一下:

一次获取4个像素点,然后获取4个像素点在色板中的位置(编号),如果任意2个像素之间的颜色不相等,则这两个节点之间接近程度+1,对应更新邻接矩阵中对应的元素数值。

代码:

for (var x=0; x<canvas.width-1; x++){

for (var y=0; y<canvas.height-1; y++){

var p1 = pixel_at(pixels, canvas.width, x, y);

var p2 = pixel_at(pixels, canvas.width, x+1, y);

var p3 = pixel_at(pixels, canvas.width, x+1, y+1);

var p4 = pixel_at(pixels, canvas.width, x, y+1);

if(!pequal(p1, p2)){

conn[pindex(palette,p1)][pindex(palette,p2)] += 1;

conn[pindex(palette,p2)][pindex(palette,p1)] += 1;

console.log(conn.toString())

}

if(!pequal(p1, p3)){

conn[pindex(palette,p1)][pindex(palette,p3)] += 1;

conn[pindex(palette,p3)][pindex(palette,p1)] += 1;

}

if(!pequal(p1, p4)){

conn[pindex(palette,p1)][pindex(palette,p4)] += 1;

conn[pindex(palette,p4)][pindex(palette,p1)] += 1;

}

if(!pequal(p2, p3)){

conn[pindex(palette,p2)][pindex(palette,p3)] += 1;

conn[pindex(palette,p3)][pindex(palette,p2)] += 1;

}

if(!pequal(p2, p4)){

conn[pindex(palette,p2)][pindex(palette,p4)] += 1;

conn[pindex(palette,p4)][pindex(palette,p2)] += 1;

}

if(!pequal(p3, p4)){

conn[pindex(palette,p3)][pindex(palette,p4)] += 1;

conn[pindex(palette,p4)][pindex(palette,p3)] += 1;

}

}

};

STEP2.4

邻接矩阵归一化处理

通过归一化处理后,我们就得到这张图片的邻接矩阵啦,一张图片的色彩关系就被量化了。

一张图片的色彩关系如何真正被机器所读懂的方法

以上为全文。

近期活动推荐

快!TensorFlow、黑客马拉松、DevFest千人大会 ,GDG DevFest 2018在召唤你

--------------------------------------

mixlab 无界社区 是一所面向未来的实验室,它提倡“跨界创新,开放成长”的理念。

——跨界 开放 互助 学习 思维 创新。

目前社区汇集了1500+跨学科人群,主要来自GoogleBrain、微软、华为、阿里鲁班、腾讯、旷视、三角兽、物灵科技、众安保险、美团、360等科技人才、设计师及CEO和投资人;高校分布MIT、Oxford、Cambridge、CMU、UoM、清华、上交大、同济等学生及教师群体;学科跨越机器学习、自然语言处理、量化交易、物联网、区块链、前端、后端、产品经理、UI设计、建筑设计、服装设计、珠宝设计、音乐、艺术等。

社区典型的用户技能为: ML00:小程序开发、AI+设计 ML04: 算法作曲 ML05:AI变脸 ML07:WebGL+Three.js数据可视化 ML14:增长黑客 ML16:机器学习 ML37:AR ML41:人工智能+音乐 ML44:珠宝设计+参数化设计 ML83:量化交易、数字货币交易 ML109:Arduino、processing ML113:人工智能+服装设计 ML206:VR/AR ML245:建筑设计智能化

详细介绍点击以下卡片:

mixlab期待您的加入!

原文发布于微信公众号 - 无界社区mixlab(Design-AI-Lab)

原文发表时间:2018-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

通过AI检测和分离古老雕刻中的字母

在Arxiv上发表的一篇论文“Open Source Dataset and Machine Learning Techniques for Automatic...

8320
来自专栏CDA数据分析师

数据挖掘中最易犯的10个错误,请绕行!

按照 Elder 博士的总结,这 10 大易犯错误包括: 0、缺乏数据( Lack Data ) 1. 太关注训练( Focus on Training ) 2...

19790
来自专栏数据科学与人工智能

【数据科学】数据科学能回答什么样的问题?

机器学习是数据科学的发动机。每种机器学习方法(也称为算法)获取数据,反复咀嚼,输出结果。机器学习算法负责数据科学里最难以解释又最有趣的部分。数学的魔法在此发生。...

27880
来自专栏大数据文摘

谷歌DeepMind AI再次完爆人类 读唇语正确率胜专家(附论文下载)

21650
来自专栏新智元

【荐书】机器学习需要的数学知识和基础书籍推荐

【新智元导读】我们在《机器学习里,数学究竟多重要?》一文中提供了机器学习所需的数学知识和建议,对于初学者来说,并不需要先掌握大量的数学知识再开始做机器学习。学习...

412120
来自专栏PPV课数据科学社区

北大数据分析老鸟写给学弟们一封信

以下是我在近三年做各类计量和统计分析过程中感受最深的东西,或能对大家有所帮助。当然,它不是ABC的教程,也不是细致的数据分析方法介绍,它只是“总结”和“体会”。...

43490
来自专栏新智元

周志华Deep Forrest论文参与者答网友问,或6月1日开源

【新智元导读】新智元之前发布周志华老师的Deep Forrest论文引起了广泛关注和讨论。本文作者Ji Feng正是该论文的参与者,他在知乎上对这篇论文的评论做...

359100
来自专栏华章科技

干货 :数据挖掘中易犯的11大错误

5. 使用了未来的信息(Accept Leaks from the Future)

9420
来自专栏AI科技评论

张钹院士:AI科学突破的前夜,教授们应当看到什么?

AI 科技评论按:12 月 27 日 AI 科技评论去清华蹭了一个研讨会,主题是「从阿尔法 Go 到通用人工智能:脑科学与人工智能」。 这是清华大学脑与智能实验...

420120
来自专栏人工智能头条

几种监督式学习算法的比较

11720

扫码关注云+社区

领取腾讯云代金券