【问题标题】:Changing the image point resolution for sparsely populated matrix更改稀疏矩阵的图像点分辨率
【发布时间】:2012-10-02 19:51:40
【问题描述】:

我有一个图像(或矩阵),其中绝大多数点等于 NaN,只有少数点(在示例中显示为蓝色)是已知的。我想更改此图像(或矩阵)的分辨率,如 imresize。但是,问题是 imresize 不适用于填充 NaN 的矩阵,如果我想用其他值替换 NaN 值,最终的插值也不正确。有什么解决方案吗?一种解决方案可能是使用特定邻域的反距离,然后找到新的粗分辨率值。

【问题讨论】:

  • 正如我所说,它改变了准确性,我正在寻找一种方法来避免我这样做。
  • 是的,你是对的,我发帖的时候意识到了
  • 实现您自己的简单版本,接受 NaN 值并且调整大小应该可以在不触及您宝贵的忧郁的情况下工作。如果您正在寻找与图像中带有 NaN 的 imresize 相同的效果,您将永远不会得到这些结果,因为必须处理 NaN。 NaN 没有正确答案
  • 我需要一个在matlab中使用的简单方法,我不知道!!
  • 我觉得有办法!使用插值方法!但我不知道如何

标签: image matlab image-processing sparse-matrix


【解决方案1】:

你可以使用一个简单的最近邻:

img2 = kron(img, ones(2))  %# for scale factor 2
img2 = kron(img, ones(3))  %# for scale factor 3
...

唯一的缺点是你只能有整数值的比例因子。这是完全有道理的,因为使用插值调整 NaN 的大小是完全不可能的。

作为替代方案,您可以使用

img(isnan(img)) = -1;          %# or something else more suited
img2 = imresize(img, 1.2)      %# resize your img normally

img2(img2~=1 | img~=0) = NaN;  %# make everything that's not valid NaN again

【讨论】:

  • tnx 为你的答案,但正如我所说,我有一些点等于 0 和 1,我不能用另一个值替换 NaN 值,因为结果会改变。此外,克朗模具也为此目的而工作。我认为我应该实现一种插值方法,只考虑 un-NaN 值进行插值。
  • @Sam:你真的尝试过这样做吗?这些值确实会“改变”,但是你将那些非 0 和非 1 值的像素扔掉,你会得到一个包含 NaN 和 0 和 1 的重新调整大小的图像,仅此而已。你会得到一些混叠,但这是你能做的最好的。编写自己的插值会很麻烦,我保证没有比这更好的了。
  • 我想试试你的代码的时候报错,img2和img的维度不相等!
【解决方案2】:

我只会草拟一个可行的解决方案:

  1. 在值有效的地方制作矩阵掩码
  2. 调整该蒙版的大小
  3. 重新填写值

前两个步骤非常简单:

mask      = ~isnan(data);
largeMask = imresize(mask, factor);
largeImage = largeMask;

棘手的部分在最后一步,我不会实施,而只是展示我想要做的事情。我会在未调整大小的数据 (index = find(~isnan(data))) 中订购有效值,这样如果您可以在更大的数据中恢复该顺序,您只需将它们填回即可。对于该恢复,您可能需要计算 @987654323 @小矩阵中每个数据点的坐标,自己转换成大矩阵,找到它的邻居并填充。

编辑:当您调整掩码大小时,您可能会得到很好的结果,用NaN 替换一些不会扭曲点值的值替换数据大小,然后重新应用将掩码转换为您的图像以将 NaN 放回原位。无论如何,这只是在黑暗中的一个镜头,因为您没有指定应该如何插值数据或何时认为这些值有效。

对于某些问题,我认为一个很好的起点是尝试手动执行操作(或例如使用 GIMP/Photoshop),然后尝试在代码中实现它。

【讨论】:

  • tnx 为您解答,正如我发现的那样,在您的解决方案中这些点不会改变,是吗?因为您建议将它们转移到下一个较粗的网格,而应该更改它们!
  • 如果你想让它们改变,你可以在重新填写时计算它们应该是什么。
  • 那是我应该如何计算新值的确切问题!
  • 不需要大喊大叫,但如果你把问题提得更清楚一些,也许你会得到更好的答案。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 2017-10-20
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2012-11-06
  • 1970-01-01
相关资源
最近更新 更多