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')是啥意思

高手帮下忙用matlab进行图像增强跟图像分割实验!

有一个用matlab实现对图像进行‘sobel’锐化和边界提取,不知道哪里出错,总是不对

实际比较filter2D和imfilter之间的关系

MATLAB中的高斯滤波器

位准确(或多或少)opencv/C++ 平滑函数(imfilter)到 Matlab