对于一项任务,我收到了一些我无法遵循的可怕指示,而且我的教授在发送电子邮件时速度很慢,所以我想我会在这里得到更好的答复。
最初的目标是使用公式{r,g} = {R,G}/(R+G+B)
将正常颜色RGB转换为色度。然后我们要创建一个直方图,其中r和g是轴'。箱数应等于1 + log2(n) where n = number of rows
。
这怎么可能?假设我们有一个4x4的数组,我们必须创建一个3x3矩阵的直方图,这不会均匀分配,我们会有问题......
以下是项目规范:
事实证明,如果我们用RGB替换颜色,我们也知道 色度{r,g} = {R,G} /(R + G + B)则图像很多 被成像的表面的更多特征,而不是 光照亮那些表面。所以,而不是颜色,{R,G,B}, 让我们使用色度{r,g}。 [但请注意黑色,即{R,G, B} = {0,0,0},像素。]
关于色度的好处在于它是2D。所以我们的直方图是 一个二维数组,r沿一个轴,g沿另一个轴。该 色度必然在区间[0,1]中。但是有多少箱子 我们应该沿着每个轴使用?应用(廉价版)的规则 拇指称为Sturges的规则,箱数N = 1 + log2(n),其中 n =数据大小,所以粗略的想法是使用n =行数,例如 沿r和g方向中的每一个N = 7个区间。这使我们的 直方图,H,一个小的7×7整数值数组。如果我们正常化 为了使H的总和等于1,那么我们有一个浮点数组。
我不要求任何人做这项工作,我只是要求澄清是否有人知道如何做到这一点。
目前我能够获得色度值:
for(int i= 0; i < 1280; i++) {
for(int j = 0; j < 720; j++) {
rgb = resTemp.getRGB(i, j);
R = (rgb >> 16) & 0xFF;
G = (rgb >> 8) & 0xFF;
B = (rgb) & 0xFF;
r = R/(R+G+B);
g = G/(R+G+B);
b = B/(R+G+B);
}
}
答案 0 :(得分:2)
您的2D色度值在0..1,0..1
范围内r = R/(R+G+B);
g = G/(R+G+B);
这意味着对于每个像素,你有一个2d值,你可以放在这个连续空间中的某个地方
^ R
|(1,0)
|
|(0,0) (0,1) G
|----------->
如果您以2x2的方式对其进行分类,则将每个分配到bin中,如
R
^
|-------|------|
| bin | bin |
| | |
|-------|------|
| bin | bin |
| | |
|-------|------|>G
E.g。值[0.3,0.2]进入左下角。 [0.9,0.9]进入右上角。你也可以将它变成更精细的7x7网格。
现在,您遍历所有[r,g]值并计算进入哪个bin的值。结果可能就像
30 | 12
------------
4 | 12
这是直方图H.
现在,您可以通过将值转换为百分比来对其进行标准化。这是通过除以总数来完成的。例如。第一个30 / (30+12+4+12)
。最后的结果是一系列花车。
0.5 | 0.2
------------
0.0 | 0.2
答案 1 :(得分:1)
免责声明:本网站上的无人可以为您提供有关如何解释作业问题的明确说明。您将不得不问任何人将此任务分配给您。
那就是说,在我看来你误解了直方图的概念。直方图中的区间数不需要除以图像中的像素数。
让我们举一个小例子。以你的4×4像素图片为例(实际上它太小而无意义),假设各像素具有以下( r , g )值(您使用给定的公式事先计算过的。)
(0.162153, 0.888718) (0.712812, 0.531226) (0.604891, 0.348852) (0.948258, 0.439340)
(0.109330, 0.891049) (0.600158, 0.697887) (0.420215, 0.132211) (0.187572, 0.404733)
(0.321997, 0.372477) (0.053720, 0.134205) (0.662678, 0.775244) (0.717968, 0.761581)
(0.185886, 0.622118) (0.527020, 0.676139) (0.612300, 0.059857) (0.507551, 0.136314)
现在您要计算3×3直方图,沿第一个轴的 r 值和沿第二个轴的 g 值。由于您的值来自区间[0,1],并且沿每个轴有三个区间,因此这些区间为[0,1 / 3),[1 / 3,2 / 3]和[2 / 3,1]。 (你想如何处理舍入和向下取决于你。)对于每个( r , g )对,你必须决定它是什么bin 。因此,例如,第一对(0.162153,0.888718)进入bin(0,2),因为0.162153∈[0,1 / 3]和0.888718∈[2 / 3,1]。如果你对16对数字中的每一对都这样做,并记录你击中每个bin的次数,你应该得到以下直方图。
1 3 2
3 1 3
0 2 1