gpt4 book ai didi

java - 计算处理差异

转载 作者:行者123 更新时间:2023-12-01 00:10:04 26 4
gpt4 key购买 nike

我正在使用处理,我正在尝试从 2 个校正后的图像中计算视差,为此我需要从左图像中取出每个像素并从右图像中搜索一行并找到相似的像素,图像的尺寸为 640x480 .

我需要在函数 draw() 中运行 disparityImage(PImage imgL, PImage imgR) 并且速度太慢,该函数在 1-2 秒内执行,但是如果我注释这些代码行“minD=d;rightX=xr;”从 if 块
该函数在 3-5 毫秒内执行。我不明白我的代码有什么问题,我尝试了太多时间来找出问题,但我做不到。

void depthImage(PImage imgL, PImage imgR) { 
for (int x=0; x<imgL.width; x=x+1) {
for (int y=0; y<imgL.height; y=y+1) {
color imgleft=imgL.get(x,y);
float r1=red(imgleft);
float g1=green(imgleft);
float b1=blue(imgleft);

float minD=Integer.MAX_VALUE;
int rightX=0;

for (int xr=0; xr<imgR.width; xr++) {
color imgright=imgR.get(x,y);
float r2=red(imgright);
float g2=green(imgright);
float b2=blue(imgright);

float d=dist(r1, g1, b1, r2, g2, b2);

if (d<minD) {
minD=d;
rightX=xr;
}
}
}
}
}

最佳答案

dist() 计算 Euclidean distance 2 点之间。对于计算 sqrt() 功能是必需的。 sqrt()是一个非常耗时的操作。

dist(x1, y1, z1, x2, y2, z2)

可以表示为

sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) + (z2-z1)*(z2-z1))

我建议计算和比较 Euclidean distance 的平方反而。这避免了昂贵的 sqrt手术。例如。:

void depthImage(PImage imgL, PImage imgR) {
for (int x=0; x<imgL.width; x=x+1) {
for (int y=0; y<imgL.height; y=y+1) {

color imgleft = imgL.get(x,y);
float r1=red(imgleft);
float g1=green(imgleft);
float b1=blue(imgleft);

float minD_square = Integer.MAX_VALUE;
int rightX=0;

for (int xr=0; xr<imgR.width; xr++) {

color imgright=imgR.get(x,y);
float dr = red(imgright) - r1;
float dg = green(imgright) - g1;
float db = blue(imgright) - b1;

float d_square = dr*dr + dg*dg + db*db;

if (d_square < minD_square) {
minD_square = d_square;
rightX = xr;
}
}
}
}
}

关于java - 计算处理差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59438465/

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