Image 基于随机像素的图像插值
我想问一个关于单通道图像插值的问题。选择单通道只是为了简单,否则我将处理多通道图像。 假设有一个纯黑色背景(像素强度0)的单通道图像,其上有一些非零强度值的像素。我想应用一种插值算法,用相邻非零强度像素的插值值填充图像的整个黑色区域 对于适用于此问题的平滑插值,您建议使用哪种插值算法 作为输入,我们当然知道这些非黑色像素的位置及其强度。但位置有些随机(一行中可能有10个像素,另一行中只有8个)Image 基于随机像素的图像插值,image,matlab,image-processing,numerical-analysis,Image,Matlab,Image Processing,Numerical Analysis,我想问一个关于单通道图像插值的问题。选择单通道只是为了简单,否则我将处理多通道图像。 假设有一个纯黑色背景(像素强度0)的单通道图像,其上有一些非零强度值的像素。我想应用一种插值算法,用相邻非零强度像素的插值值填充图像的整个黑色区域 对于适用于此问题的平滑插值,您建议使用哪种插值算法 作为输入,我们当然知道这些非黑色像素的位置及其强度。但位置有些随机(一行中可能有10个像素,另一行中只有8个) 使用这几个非零值点,任何插值看起来都很糟糕,但您可以尝试使用二维过滤器(如高斯核)卷积图像,看看您是否
使用这几个非零值点,任何插值看起来都很糟糕,但您可以尝试使用二维过滤器(如高斯核)卷积图像,看看您是否喜欢它。常规的
interp2
在这里不起作用,因为您的点不是按固定间隔定位的(不是位于网格上)。
您可以尝试TriScatteredInterp或从文件交换下载修复
以下是您使用TriScatteredInterp的情况下的解决方案:
function solveStackOverflowProblem()
im = imread('http://i.stack.imgur.com/lMaYR.png');
im = im(:,:,2);
[i,j] = find(im);
y = j; x = i;
indexes = sub2ind(size(im),i,j);
interpolator = TriScatteredInterp(x,y,double(im(indexes)));
[Y,X] = meshgrid( 1:size(im,2),1:size(im,1));
reconstructedImage = interpolator(X,Y);
figure;imshow(reconstructedImage/255)
end
对于数量相对较少的点,理想的插值方法是创建三角形网格,仅使用每个区域的顶点确定该区域内的像素,使用加权平均值确定每个像素的颜色 为了找到三角形区域内像素的颜色,每个像素使用的权重分别是(bc-a)/a,(ac-B)/B和(a*B-C)/C。这可确保当点靠近对边时,每个点的影响退化为零,从而使三角形之间的过渡平滑 请记住,您可以使用任何类型的平均值,包括调和平均值和几何平均值,而不仅仅是算术平均值来进行计算(外观会发生变化,但其他类型的平均值可能更好)
最好的解决方案是使用。它旨在改进所有原生Matlab函数,如TriScatteredInterp和griddata。这里是一个基于使用径向基函数(在本例中为高斯函数)为具有不同强度的随机间隔点构建插值的解决方案 本质上,这会在每个点上放置一个高斯分布,根据点强度对其进行加权,并对结果求和 插值函数的锐度可通过所选高斯函数的标准偏差进行控制 要点: 内插法: 以三维方式查看: 标准偏差较小时: 守则:
pts = Table[{{RandomReal[{0, 200}], RandomReal[{0, 200}]},
RandomReal[]}, {20}]
dists = Function[points,
Plus @@ ((PDF[
MultinormalDistribution[#, 200 IdentityMatrix[2]], {x,
y}] & /@ points[[All, 1]] ) points[[All, 2]])/Length@points]
DensityPlot[dists[pts], {x, 0, 200}, {y, 0, 200}, PlotPoints -> 100]
我不熟悉matlab,所以我不确定,但Andrey的答案实际上可能与我的答案相同,只是使用现有的库函数来实现。如果是这样的话,他使用的插值器只使用算术平均值,而使用另一个插值器会非常有利。修复在这里也会起作用。用NaN元素替换零,然后将其放入修复NaN中。当然,修复的优点是,如果要插值的元素很少,修复可能会更有效,因为它不需要拟合整个图像,而只需要从与孔相邻的像素中插值孔。如果只提供了几个有效像素,那么gridfit也同样好。(披露:我是gridfit和inpaint_nans的作者。)