matlab,想添加函数tofloat,出现了这问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab,想添加函数tofloat,出现了这问题相关的知识,希望对你有一定的参考价值。

程序:
function [out,reverclasss]=tofloat(in)
identity=@(x) x;
tosingle=@im2single;

table='uint8',tosingle,@im2uint8
'uint16',tosingle,@im2uint16
'int16',tosingle,@im2int16
'logical',tosingle,@logical
'double',identity,identity
'single',identity,identity;

classIndex=find(strcmp(class(in),table(:,1)));

if isempty(classIndex)
error('unsupported input immage class.');
end

out=tableclassIndex,2(in);
reverclass=tableclassIndex,3;
问题:??? Error: File: d:\工业中心408的matlab6p5full\tofloat.m Line: 2 Column: 11
"identifier" expected, "(" found.

代码有个小错,但不是你贴出来的这个。

function [out,reverclasss]=tofloat(in)

其中的 reverclasss 应为 reverclass。

 

调用实例:

>> [out,reverclass] = tofloat(uint8(20))
out =
    0.0784

reverclass =
    @im2uint8

如果在你的系统上出错,请截图并说明软件版本(在低版本例如6.5会出错,因不支持匿名函数)。

追问

恩,是6.5版本的,是需要怎弄呢?是有替代函数吗?

追答

identity=@ (x) x;

改成

identity=inline('x');

试试。

 

我现在电脑上没有6.5,无法测试是否还存在其它问题,暂时只能给你这样的建议,有问题再说。

追问

无法定义,出现了
Error: File: d:\工业中心408的matlab6p5full\tofloat.m Line: 2 Column: 22
Missing operator, comma, or semicolon.

追答

你是把我给的代码直接复制粘贴过去的吗?
不应该出现这样的问题的。
请贴出完整的报错信息,最好是由截图。

追问

这样。。。

追答

请您仔细看看,我给的代码是

identity=inline('x');

而您图中的是

identity=inline('x') x;

这能一样吗?就算要指定自变量,也应该是

identity=inline('x','x');

另外,如果条件允许,建议最好换稍新一点的版本。6.5实在太老了,连我这么念旧的人都基本不用了。

追问

好吧

参考技术A 检查一下括号是不是打成了中文的(),应该替换为英文()追问

不是,有改过,但不行

MATLAB中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()或im2double()将数据类型转换为浮点型

MATLAB中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()将数据类型为float

为什么?
看一个实例的运行结果就知道了~

f = imread('F:\\material\\images\\P0020-Line-detection-01.tif');
w = [2 -1 -1;-1 2 -1;-1 -1 2];
g_tofloat = imfilter(tofloat(f),w); %也可用函数im2double()替代tofloat()
g_notofloat = imfilter(f,w);

上面程序的运行结果如下:


从上面两幅图中看出,如果不转换成float类型,则很有可能在运算中出现严重的数据截断问题,从而导致得不到正确的结果。

值得注意的是:目前的MATLAB中,比如 R2019a是没有函数tofloat()的,这里我给大家提供一个。
下载链接:https://pan.baidu.com/s/1R7UjDEQ9VAxaZYbbGIl2Og 提取码:hyh4

当然也可以用函数im2double()替代tofloat(),差别是im2double()是将数据类型转换为双精度浮点型,而tofloat()是将数据类型转换为单精度浮点型,双精度浮点型比单精度浮点型要更占内存空间些。

以上是关于matlab,想添加函数tofloat,出现了这问题的主要内容,如果未能解决你的问题,请参考以下文章

添加匿名函数 matlab

我们可以将函数“文本”的图例添加到 matlab 吗?

matlab imread函数

Matlab - 工作区变量的使用

频率域滤波

matlab如何让数组每个元素重复出现?