【发布时间】: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')