gpt4 book ai didi

matlab - openCV 双三次 imresize 创建负值

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:51 36 4
gpt4 key购买 nike

我注意到,在 openCV 中使用双三次插值对矩阵进行下采样时,即使原始矩阵都是正值,我也会得到负值。

我附上下面的代码作为例子:

// Declaration of variables
cv::Mat M, MLinear, MCubic;
double minVal, maxVal;
cv::Point minLoc, maxLoc;
// Create random values in M matrix
M = cv::Mat::ones(1000, 1000, CV_64F);
cv::randu(M, cv::Scalar(0), cv::Scalar(1));
minMaxLoc(M, &minVal, &maxVal, &minLoc, &maxLoc);
// Printout smallest value in M
std::cout << "smallest value in M = "<< minVal << std::endl;

// Resize M to quarter area with bicubic interpolation and store in MCubic
cv::resize(M, MCubic, cv::Size(0, 0), 0.5, 0.5, cv::INTER_CUBIC);
// Printout smallest value in MCubic
minMaxLoc(MCubic, &minVal, &maxVal, &minLoc, &maxLoc);
std::cout << "smallest value in MCubic = " << minVal << std::endl;

// Resize M to quarter area with linear interpolation and store in MLinear
cv::resize(M, MLinear, cv::Size(0, 0), 0.5, 0.5, cv::INTER_LINEAR);
// Printout smallest value in MLinear
minMaxLoc(MLinear, &minVal, &maxVal, &minLoc, &maxLoc);
std::cout << "smallest value in MLinear = " << minVal << std::endl;

我不明白为什么会这样。我注意到,如果我选择 [0,100] 之间的随机值,则调整大小后的最小值通常为 ~-24 与上面代码中 [0,1] 范围内的 -0.24 相比。

作为比较,在 Matlab 中不会发生这种情况(我知道此处显示的加权方案略有不同:imresize comparison - Matlab/openCV)。

这是一个简短的 Matlab 代码片段,它保存了 1000 个随机缩小矩阵中的最小值(eahc 矩阵的原始尺寸为 1000x1000):

currentMinVal = 1e6;
for k=1:1000
x = rand(1000);
x = imresize(x,0.5);
minVal = min(currentMinVal,min(x(:)));
end

最佳答案

正如您在 this answer 中看到的那样双三次核不是非负的,因此,在某些情况下,负系数可能占主导地位并产生负输出。

您还应该注意,Matlab 默认使用'Antialiasing',这对结果有影响:

I = zeros(9);I(5,5)=1; 
imresize(I,[5 5],'bicubic') %// with antialiasing
ans =
0 0 0 0 0
0 0.0000 -0.0000 -0.0000 0
0 -0.0000 0.3055 0.0000 0
0 -0.0000 0.0000 0.0000 0
0 0 0 0 0

imresize(I,[5 5],'bicubic','Antialiasing',false) %// without antialiasing
ans =
0 0 0 0 0
0 0.0003 -0.0160 0.0003 0
0 -0.0160 1.0000 -0.0160 0
0 0.0003 -0.0160 0.0003 0
0 0 0 0 0

关于matlab - openCV 双三次 imresize 创建负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149026/

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