a我在我的matlab代码中发现了奇怪的非确定性行为,我可以将其减少到以下最小代码片段:
image = single(zeros(16,14));
grad = imfilter(image, [0 0 0;0 1 0;0 0 0]);
tcn = norm(grad(:));
fprintf('norm: %f \n', double(tcn));
首先,我执行"清除所有" ,然后运行代码段六次并获得以下输出
norm: 107570908894816200000000000000.000000
norm: 0.0
norm: 0.0
norm: NaN
norm: 0.0
norm: 0.0
...
然后正确的输出继续。 我可以"重启"使用"清除所有"。
的错误行为我在运行Windows 7的两台不同计算机上使用MATLAB 2014b和2013a对此进行了测试。
删除single()强制转换似乎可以解决问题。 此外,更改输入图像的大小可以解决某些值的问题。 我将使用double()强制转换来解决这个问题。
但是,我在这里遗漏了什么,或者这是imfilters单一实施的错误?
答案 0 :(得分:2)
我将回答我自己的问题,因为它在Matlab中是一个真正的错误。
我联系了Mathworks支持,他们的开发人员确认了这个错误。建议进行以下工作:
我与开发人员交谈,结果是图像处理工具箱中的错误。
out = conv2(image,grad,'same');
如果使用零填充,则使用conv2(默认情况下为imfilter)。
out = single(imfilter(double(image),grad));
iptsetpref( 'UseIPPL',假);
请注意,这将禁用图像处理工具箱中的许多功能的性能优化,并应作为最后的手段使用。