gpt4 book ai didi

algorithm - 是否有仅基于少量起始值的数据填充二维矩阵的算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:37:12 25 4
gpt4 key购买 nike

我有一个二维网格,以及网格内的一组点。 (为了便于讨论,我们将它们视为位图中的颜色。)

我有一定数量的真实像素,其中我知道颜色,位图的其余部分是空白的。

Here's an example with 5 points

对于位图中的任何给定像素,我想根据它与真实像素(我知道颜色)的接近程度为其着色。

This is roughly what it should look like when complete

我发现很难弄清楚每个真实像素应该能够影响的区域。以下是一些案例:

Case (A) - 感觉它想使用它周围的 4 种颜色。直觉是 4 可能是它需要使用的最多颜色?也许我可以在像素周围的每个象限中找到最近的真实像素?

Case (B) - 感觉它只能使用 3 种颜色,因为它靠近边缘。它不想要黄色。蓝色和红色都在左下象限,所以我不能只得到最接近的真实像素。蓝色比绿色更接近,用它似乎是对的。也许蓝色和红色都相关,因为它们相隔一定的角度?

Case (C) - 这个感觉绿色是无关紧要的。洋红色非常接近,并且角度相似。

在我开始编码之前,我想看看是否已经有一个好的算法来做这种事情。任何想法将不胜感激!

感谢您的宝贵时间...

最佳答案

感谢 Nico 的回复。我有一个可行的解决方案,尽管我不知道这是否是最好的解决方案。但是,如果有人遇到这个问题,这就是我所做的。

(数组可能是我正在使用的框架所特有的,但你明白了一般的想法。)

Here is my result

它没有为颜色的影响范围设置任何界限,但我可以通过在颜色远离源点时减少颜色的影响来获得良好的结果。

//c++

void buildMatrix(){

matrix.clear();

// for each pixel
for (int x = 0; x < 128; ++x){
for (int y = 0; y < 128; ++y){

auto matrix_point = new MatrixPoint(x,y);

// for each point where I know the colour, find out how far it is from this point
for (int colour_index = 0; colour_index < colours.size(); ++colour_index)
{
int x2 = colours[colour_index].x;
int y2 = colours[colour_index].y;

auto distance = getColourAmount(x, y,x2,y2);

matrix_point->distance_index.add(colour_index, distance});

if (x == x2 && y == y2)
{
// found a solid colour, no need to add any more colours to this point
break;
}
}

// scale the results so they add up to 1
float total_percentage = 0.0f;

for (int i = 0; i < matrix_point->distance_index.size(); ++i)
{
float this_percentage = matrix_point->distance_index[i].percent;
total_percentage += this_percentage;
}

// scale percentages so that they add up to 1
for (auto &item : matrix_point->distance_index)
{
item.setY(item.getY() / total_percentage);
}

matrix.add(*matrix_point);
}
}
}

float getColourAmount(int x1, int y1, int x2, int y2)
{
float deltaX = x1 - x2;
float deltaY = y1 - y2;
float max_distance = sqrtf(128 * 128 + 128 * 128);
auto output = (max_distance - sqrtf((deltaX * deltaX) + (deltaY * deltaY))) / max_distance;
return pow(output,10); // scale down the result
}

关于algorithm - 是否有仅基于少量起始值的数据填充二维矩阵的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com