查找日志时出现Matlab错误

查找日志时出现Matlab错误,matlab,logarithm,Matlab,Logarithm,我试图使用以下代码在matlab中查找图像每个像素的log 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 fprintf('log of 190 is %d', log10(190)); 这里m1是阶数为221x201的二维数组。 但我面临着这个错误 ??? Undefined function or

我试图使用以下代码在matlab中查找图像每个像素的
log

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
fprintf('log of 190 is %d', log10(190));
这里m1是阶数为221x201的二维数组。 但我面临着这个错误

??? 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));
但当我使用以下代码调试日志函数时

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
fprintf('log of 190 is %d', log10(190));

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

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

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

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