我有大量的图像。我想为所有这些对象创建一个色相直方图,例如这篇文章:http : //blog.scottlogic.com/2014/04/12/app-colour-analysis.html
最好的方法是什么,我需要从一组图像中获得什么值?
从博客文章中。
| Hue | Count of pixels with this hue value across all images |
------------------------------------------------------------------
| 0 | xxxxxx |
| 1 | yyyyyy |
....
| 360 | zzzzzz |
画一个圆,给每个径向线一个长度=第二列的缩放值(使用d3.scale
)和对应于色相的颜色(可以使用d3.hsl
)
从数据的角度来看,您将必须弄清楚如何从图像中获取H值。一个很好的起点是如何从普通图像生成HSL或HSI直方图?
这是生成圆的一种方法(一旦有了数据)
// sample data - the index indicates the Hue value (0 - 360) and the value is the number of pixels
var data = []
for (var i = 0; i <= 360; i++)
data.push(parseInt(Math.random() * 5000));
// size of the canvas
var size = 500;
// how much big do you want the inner circle to be 100% = no bars!
var innerCirclePercentage = 0.2;
var innerCircleRatio = 0.5 + innerCirclePercentage / 2;
var scale = d3.scale.linear().domain([0, d3.max(data)]).range([size * innerCircleRatio, size]);
var svgContainer = d3.select("body").append("svg")
.attr("width", size)
.attr("height", size);
var lines = svgContainer
.selectAll(".line")
.data(data);
lines.enter()
.append("line")
.attr("class", "line")
.attr("x1", size * 0.5)
.attr("y1", size * innerCircleRatio)
.attr("x2", size * 0.5)
.attr("y2", function(d, i) {
return scale(d);
})
.attr("transform", function(d, i) {
return "rotate(" + i + ", " + size * 0.5 + ", " + size * 0.5 + ")"
})
.style("stroke-width", 5)
.style("stroke", function(d, i) {
return "hsl(" + i + ", 80%, 50%)";
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句