【问题标题】:Matlab error while finding logMatlab在查找日志时出错
【发布时间】:2012-11-02 13:46:43
【问题描述】:

我正在尝试使用以下代码在 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));

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

【问题讨论】:

    标签: matlab logarithm


    【解决方案1】:

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

    如果你想取 uint8 的对数,你要么必须定义一个你自己的对数函数来接受这样的输入,或者更直接的,将 uint8 转换为 log10 的类型很高兴。例如,你可以写:

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2014-10-13
      • 2015-12-08
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      相关资源
      最近更新 更多