2012-11-02 60 views
1

我试图使用找到的在Matlab图像的每个像素的base 10log以下代码Matlab的错误,同时寻找日志

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是顺序的2-d阵列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)); 

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

回答

3

错误消息告诉你问题出在哪里,你试过将log10函数应用于uint8类型的值,并且该函数没有为该类型的数字定义。你没有意识到的是,当一个图像文件符合某些标准(阅读这些标准的文档)时,imread将把像素数据捕获到uint8的数组中,而不是实数。

如果你想利用uint8你要么必须定义自己的对数函数,它接受这样的投入,或者更直白的对数,铸uint8以这样一种类型,log10很满意。例如,你可以写:

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

而现在你已经意识到为什么你的诊断测试没有告诉你任何有用的事情,当你执行命令log10(190) Matlab的,默认情况下,决定190是键入double并计算对数而不抱怨。 log10(uint8(190))讲述了一个不同的故事。