[已答复] matlab图像插值结果与常识不符

[复制链接]
晓川 发表于 2016-4-21 21:00:10
刚接触matlab,想比较不同图像插值算法的精度。
具体的做法是:通过某插值算法,将一张图像放大2倍后再缩小到原来的尺寸,结果图像与原始图像相减,如果计算结果大于1,则该点像素设置为白色,否则设置为黑色。
实验结果:最近邻插值得到了一幅全黑图像,反而是双线性插值和立方卷积插值产生了许多白色像素。
理论上后两者的精度是远好于前者的,请大神帮忙分析一下产生这种现象的原因,是代码的问题还是方法的问题?如果是方法的问题,有没有更科学的评价插值算法精度的方法?

%代码如下
src = imread('电路板图片.jpg');
%'nearest','bilinear','bicubic'
i1 = imresize(src, 2.0, 'nearest');
i2 = imresize(i1, 0.5, 'nearest');
diff = i2 - src;
dst = im2bw(diff, 1/255);
imshow(dst*255);

5 条回复


OlaBaby 发表于 2016-4-21 21:08:15
加一句src=im2double(src);

晓川 发表于 2016-4-21 21:26:51
OlaBaby 发表于 2016-4-21 21:08
加一句src=im2double(src);

加了之后仍然不行,diff还是全零图像。至少排除了舍入误差的问题,谢谢你

晓川 发表于 2016-4-21 22:03:43
好吧,知道原因了
假设原图像尺寸m*n,目标图像尺寸a*b,原图像中点(i,j)对应目标图像点(x,y)
在水平方向上: x = (i - a/2)*m/a+m/2     (1), 最近邻插值会使其指向(x+dx),|dx|<0.5
现在从目标图像反推回去: I = (x+dx-m/2)*a/m+a/2    (2)
将(1)代入(2):I = i+a/m*dx,最近邻插值会使I指向i
因此原图像经过处理之后又回到了它本身,所以相减得零,其他插值法需要用邻域像素计算,因此无法映射回来

OlaBaby 发表于 2016-4-21 22:05:37
晓川 发表于 2016-4-21 21:26
加了之后仍然不行,diff还是全零图像。至少排除了舍入误差的问题,谢谢你 ...

仔细想想,邻近值实际上更好,因为邻近值就是取的图像原来的值,缩小回去还是原来的值
是0就对了
而插值得到的是新的值,回去了之后误差就多了
图像的质量不能这样来比较,感觉有点尴尬
放大成2倍的图像,肯定是插值的好,邻近值呢,两个值之间的跳变明显,而插值呢,是取的两个值的权重
所以过度平顺

晓川 发表于 2016-4-22 09:53:47
OlaBaby 发表于 2016-4-21 22:05
仔细想想,邻近值实际上更好,因为邻近值就是取的图像原来的值,缩小回去还是原来的值
是0就对了
而插值 ...

确实是这样,看了几篇论文都是用峰值信噪比和均方误差评价的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表