【问题标题】:Matlab: How to obtain 3d image from grayscale gradientMatlab:如何从灰度渐变中获取 3d 图像
【发布时间】:2014-08-14 15:38:42
【问题描述】:

我有一个灰度表面的二维显微图像。现在我想在 3d 中绘制这个,将图像的渐变转换为高度(我认为是通过积分)。尝试 grdx&grdy 的 2d-integration 没有产生任何有用的结果。

您建议采用哪种方式? 我不太熟悉不同的绘图方式以及是否使用 imgradient 并以某种方式组合 Gmag 和 Gdir 或使用 imgradientxy 并组合 Gx 和 Gy(这里的幅度是否已经在 Gx,y 的矩阵中?)。

感谢您的帮助 - 非常感谢!

【问题讨论】:

  • 不清楚您是想绘制一些漂亮的东西还是获取图像上的实际表面高度。对于后者,imgradient 仅适用于图像中的灰度值 - 如果这些值与高度真正相关,我看不到通过将它们传递给 imgradient 然后尝试再次将它们转换回来添加了什么信息.
  • 我有这张图片i.imgur.com/LnoL6wJ.png 并希望将其设为 3 维,因为渐变应该是指 3d 图像的渐变(它是一个带有半球的表面)
  • 假设照明是这样的,“明亮”在这里意味着平坦(背景,半球的顶部)和“黑暗”=陡峭的边缘,你所拥有的在某种程度上已经是渐变图像。您将遇到的问题是找出正确方向的方法 - 例如。当我从图像的一侧移动到另一侧时,强烈的渐变是否意味着“高度上升”或“高度下降”?可能从找圆方法(霍夫等)开始,然后从那里开始。
  • 是的,没错。当我整合负梯度时,我得到了一些结果,但由于方向问题,半球有一个很大的陨石坑。无论如何我在脚本中使用 hough 所以我考虑将圆内的所有渐变设置为 0。我有圆心和圆半径,只是想:在那个圆中获取所有渐变值的最佳方法是什么,即如何获得矩阵内的圆形区域。
  • 我找到了一些示例代码,下面会产生陡峭的 zylindrical 形状。我认为这是由于图像的性质,唯一可能或有人能想到什么?我唯一的想法是将面具调整为半球形,从而创建半球。 imageSize=size(img); for k=1:size(handles.cirrad) [xx,yy] = ndgrid((1:imageSize(1))-handles.circen(k,1),(1:imageSize(2))-handles.circen(k,2)); mask = (xx.^2 + yy.^2)<handles.cirrad(k)^2; img(mask) = 0; end [x,y]=imgradientxy(img); x=-1*x; y=-1*y; figure; h=surf(intgrad2(x,y)); set(h, 'edgecolor','none')

标签: matlab plot gradient


【解决方案1】:

这对你有什么好处?

a 是图像的路径。

[b,c] = imgradient(a);
surf(b);

编辑:

a1 = imread('LnoL6wJ.png');
a = a1(:,:,3); 
[b,c] = imgradient(a);
h = surf(b);
set(h, 'edgecolor','none')

【讨论】:

  • 感谢您的回复。它给了我一个非常黑暗的图,许多峰与表面不对应:i.imgur.com/rHOftkz.png 这是真实图像i.imgur.com/LnoL6wJ.png
  • 看看我的编辑,如果你运行它然后稍微改变角度,它会看起来像这样i.imgur.com/8mR6ZL7.png 它可能不适合你,但它是否符合正确的路线?
  • 非常感谢!是的,这与我现在获得的相似,我想这是最好的结果,因为梯度接近无穷大,并且使用这些数据实际上不可能真正映射半球表面。我会尝试获取我认为的不同数据。
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 2013-06-04
  • 2016-04-22
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
相关资源
最近更新 更多