我正在研究一些断层扫描,并试图提高数据质量。您可以在此处查看原始数据:http://i.imgur.com/270HT.png。 我想要做的是沿X方向平滑图像。基本上拉伸图像并在离散跳跃之间插入数据。
我对图像处理知之甚少,但据我的肉眼可以看出,matlabs内置imresize
和interp2
功能并不是很好。
有人可以帮我提高一下吗?
答案 0 :(得分:2)
我不确定通常的插值是否正确。您的图像似乎是通过单独的列测量创建的。如果你查看你的数据,似乎相邻的列几乎是彼此的副本。他们似乎只是翻译了一下。如果你获取两个相邻列的亮度并绘制它,你会看到
对于两个峰值,即图像中的类似血管的结构,情况确实如此。 那么如何计算两个相邻列的相关性来获得偏移
呢?
如果它们移动了几个像素,你会看到两列相关性最高。
所以这是我首先尝试的。计算每个相邻列的偏移量。您将获得一个偏移列表,告诉您有多少必须转换一条线以使其与其邻居最佳匹配。然后,您可以平滑此列表并使用平滑版本来翻译每一列。 这应该修复原始图像中x = 7的列。
此外,您当然可以通过插入此偏移列表在x方向上拉伸图像。假设您有10个相邻列及其偏移量,它们匹配最多。
然后,您可以使用具有不同翻译的相同行来使用中间步骤。通过这种方式,您可以实现从列到列的平滑过渡,并且可以调整x方向的大小。
此
然后,您平滑此列表并使用平滑版本来翻译每一列。这应该修复原始图像中x = 7的列。
需要澄清。如果有偏移列表,那么您希望用于每列翻译的是此列表与其平滑版本之间的差异。我希望我就在这里,因为我没有尝试过。
答案 1 :(得分:1)
您可以使用不同风格的imresize - >例如,将'lanczos3'作为可选参数。 (参见本手册)。 如果您更喜欢,也可以在调整大小后尝试锐化图像。 但是,你永远不会得到真正好的东西,因为插值总是无处不在地创建数据。