使用matlab通过简单插值增强图像

时间:2011-12-15 02:10:59

标签: matlab image-processing interpolation

我正在研究一些断层扫描,并试图提高数据质量。您可以在此处查看原始数据:http://i.imgur.com/270HT.png。 我想要做的是沿X方向平滑图像。基本上拉伸图像并在离散跳跃之间插入数据。

我对图像处理知之甚少,但据我的肉眼可以看出,matlabs内置imresizeinterp2功能并不是很好。

有人可以帮我提高一下吗?

2 个答案:

答案 0 :(得分:2)

我不确定通常的插值是否正确。您的图像似乎是通过单独的列测量创建的。如果你查看你的数据,似乎相邻的列几乎是彼此的副本。他们似乎只是翻译了一下。如果你获取两个相邻列的亮度并绘制它,你会看到

enter image description here

对于两个峰值,即图像中的类似血管的结构,情况确实如此。 那么如何计算两个相邻列的相关性来获得偏移

呢?

enter image description here

如果它们移动了几个像素,你会看到两列相关性最高。

所以这是我首先尝试的。计算每个相邻列的偏移量。您将获得一个偏移列表,告诉您有多少必须转换一条线以使其与其邻居最佳匹配。然后,您可以平滑此列表并使用平滑版本来翻译每一列。 这应该修复原始图像中x = 7的列。

此外,您当然可以通过插入此偏移列表在x方向上拉伸图像。假设您有10个相邻列及其偏移量,它们匹配最多。

enter image description here

然后,您可以使用具有不同翻译的相同行来使用中间步骤。通过这种方式,您可以实现从列到列的平滑过渡,并且可以调整x方向的大小。

enter image description here

修改

  

然后,您平滑此列表并使用平滑版本来翻译每一列。这应该修复原始图像中x = 7的列。

需要澄清。如果有偏移列表,那么您希望用于每列翻译的是此列表与其平滑版本之间的差异。我希望我就在这里,因为我没有尝试过。

答案 1 :(得分:1)

您可以使用不同风格的imresize - >例如,将'lanczos3'作为可选参数。 (参见本手册)。 如果您更喜欢,也可以在调整大小后尝试锐化图像。 但是,你永远不会得到真正好的东西,因为插值总是无处不在地创建数据。