1

我正在尝试使用以下代码在 matlab 中查找图像logbase 10每个像素

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

这里 m1 是一个 221 X 201 阶的二维数组。但我遇到了这个错误

??? 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));

但是当我使用以下代码调试日志功能时

fprintf('log of 190 is %d', log10(190));

它给了我正确的输出我不知道当我在循环中使用相同的代码时发生了什么。

4

1 回答 1

3

错误消息告诉您问题出在哪里,您已尝试将log10函数应用于类型值,uint8但未为该类型的数字定义函数。您没有意识到的是imread,当图像文件满足某些标准(阅读文档以了解这些标准是什么)时,会将像素数据捕获到 s 数组中uint8,而不是实数。

如果你想取 a 的对数,uint8你要么必须定义一个你自己的对数函数来接受这样的输入,或者更简单地说,将a 转换为一个满意uint8的类型。log10例如,您可以编写:

log10(double(m1(x,y)))

到现在为止,您已经意识到为什么您的诊断测试没有告诉您任何有用的信息,当您执行命令时,log10(190)Matlab 默认情况下会确定它190的类型double并计算对数而没有抱怨。 log10(uint8(190))讲述了一个不同的故事。

于 2012-11-02T13:56:50.057 回答