我正在尝试使用以下代码在matlab中查找图像每个像素的log
{/ 1}}
base 10
这里m1是221×201的二维阵列。 但我面临这个错误
m1 = imread('owl','pgm');
for x = 1:size(m1,1)
for y = 1:size(m1,2)
m1(x,y) = log10(m1(x,y));
end
end
但是当我使用以下代码调试日志功能时
??? Undefined function or method 'log2' for input arguments of type 'uint8'.
Error in ==> log10 at 20
y = log2(x);
Error in ==> q2 at 38
m1(x,y) = log10(m1(x,y));
它给了我正确的输出我不知道当我在循环中使用相同的代码时发生了什么。
答案 0 :(得分:3)
错误消息告诉您问题所在,您已尝试将log10
函数应用于类型uint8
的值,并且未针对该类型的数字定义该函数。你没有意识到的是imread
,当图像文件符合某些标准时(阅读文档中的标准是什么)会将像素数据捕获到uint8
s的数组中,而不是实数
如果你想取uint8
的对数,你要么必须定义你自己的对数函数来获取这些输入,要么更直接地将uint8
转换为类型log10
对此感到满意。例如,您可以写:
log10(double(m1(x,y)))
现在你已经意识到为什么你的诊断测试没有告诉你任何有用的东西,当你执行命令log10(190)
时,默认情况下,Matlab决定190
的类型为double
1}}并且无怨言地计算对数。 log10(uint8(190))
讲述了另一个故事。