MATLAB中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()或im2double()将数据类型转换为浮点型
Posted 昊虹算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()或im2double()将数据类型转换为浮点型的主要内容,如果未能解决你的问题,请参考以下文章
matlAB中gv=imfilter(I2,sv,'replicate')是啥意思