所以我有这个图像处理程序,我使用线性回归算法来找到一个平面,最适合所有的点(x,y,z:z是像素颜色强度(0-255)超级神秘的逻辑错误的平面拟合图像处理算法
简单地说,我有?X?尺寸的这张图片。我运行该算法,我也得到这些A,B,C的值。(3浮点值)
然后我去程序中的每个像素并用mod_val减去像素值其中
mod_val =(-A * x -B * y)/ C
A,B,C是常数,而x,y是x,y平面中的像素位置。
当图片的尺寸可以被100整除时,它的完美但不是图片断裂时。图片本身与原图相同,但有一条对角线与颜色对比度横跨图片。该程序应该使中心的像素颜色一致。
我试图运行图片mod_val = 0不能被100维图片整除,并且它完美地复制了一张新图片。所以我怀疑存储和写入读取数据的对齐方面存在问题。 (这张图片是灰度8 bit.bmp)
我试过改变A,B,C值,但对角线保持不变。对角线内图像碎片的颜色会发生变化。
当我运行1400 x 1100图片时,它完全符合上面写的mod_val方程,这是最令人困惑的部分。
我花了很多时间寻找舍入误差。他们几乎都是漂浮物。我用于破坏图像的尺寸为1490 X 1170
这里是代码的gragment其中i认为一个错误正在发生:
int img_row = row_length;
int img_col = col_length;
int i = 0;
float *pfAmultX = new float[img_row];
for (int x = 0; x < img_row; x++)
{
pfAmultX[x] = (A * x)/C;
}
for (int y = 0; y < img_col; y++)
{
float BmultY = B*y/C;
for (int x = 0; x < img_row; x++, i++)
{
modify_val = pfAmultX[x] + BmultY;
int temp = (int) data.data[i];
data.data[i] += (unsigned char) modify_val;
if(temp >= 250){
data.data[i] = 255;
}
else if(temp < 0){
data.data[i] = 0;
}
}
}
delete[] pfAmultX;
的img_row,img_col根据VS调试模式
是正确的任何帮助将不胜感激。我一直试图找到这个错误现在好几个小时,我的老板告诉我,我不能回家,直到我找到这个bug .....
算法之前(1400 x 1100,工程) 嗯,我归结问题的东西:
之前(1490 X 1170,演示了此问题) 后
更新后与广泛的测试后的x坐标。
这是因为当我使用大的A或B值或两者(C值总是〜.999)1400x1100它不会创建对角线。
但是,对于其他图像,大B值不会创建对角线,但会产生相当小的 - avg A值会创建对角线。
还有什么,当我测试一张图片,其中x不能被100分,但y可以被10整除时,答案是正确的。
你可以张贴四张图片:1)之前,2)没有显示错误后(尺寸可以被100除尽), 3)之前,4)显示错误之后? – Patashu
我想但我不能,因为我需要改变10声望.... – user2427671
将它们上传到像imgur这样的网站,并从您的问题链接到它们。之后我可以编辑它们直接显示。 – Patashu