image-processing - 选择矩阵中感兴趣区域中的数据(使用 Mathematica)

标签 image-processing wolfram-mathematica

我有一个(mathematica 8.0.1.0-)我自己无法解决的问题。
我在矩阵中有测量数据,我想选择其中一些,然后将它们相加。

为了更好地解释我的问题,这里有一个简单的例子。数据可以由矩阵 S 产生:

S = Table[ -Sin[i/2] - Sin[j/2], {i,20}, {j,20}];

它们可以很好地绘制:
xmin = N[Min[S]]; 
xmax = N[Max[S]]; 
mycolorfun = Function[ Blend[{Blue,Cyan,Green,Yellow,Red},#] ];


MatrixPlot[S, PlotRange -> {All,All,All}, AspectRatio -> 1/1,
   ColorFunction -> (mycolorfun[ Rescale[ #1{xmin,xmax} ] ]&),
   ColorFunctionScaling -> False, MaxPlotPoints -> Automatic,
   FrameLabel -> {y,x} ]

然后应该得到一张与此类似的图片:

enter image description here

现在我想选择棕色绘制多边形内的数据。这些数据应该在最后加起来。

我怎样才能做到这一点?
好的,我可以使用矩形并通过选择/猜测良好的开始和结束索引来构建子矩阵。然后我只需要建立这个子矩阵的总和。但我更喜欢多边形(如果我们不争论与多边形线相交的矩阵值的小问题,则更准确)。如果我可以通过将多边形“绘制”到矩阵中直接选择我的感兴趣区域 (ROI),我会很高兴的(不再费时选择/猜测矩阵索引)。
有人可以帮我解决我的问题吗?如果它不能用mathematica 解决,还有其他我可以使用的程序吗?

我会很高兴得到一些帮助和提示!

最佳答案

如果手动以图形方式选择感兴趣的区域不成问题,那么您可以:

首先,使用可视化从您的数据中创建一个图像,这样您之后就可以轻松地手动选择:

S = Table[-Sin[i/50.] - Sin[j/50.], {i, 400}, {j, 400}];
img = ReliefImage@S

然后使用前端图形工具在您感兴趣的区域上绘制多边形(单击鼠标右键):

enter image description here

然后获取与您的多边形相对应的蒙版(再次,右键单击按钮):

enter image description here

最后,用掩码制作一个二值图像,并用它来恢复多边形内像素的总和:
Total[S*ImageData@mask, Infinity]

整个过程是这样的:

enter image description here

编辑 :如果您想使用手绘轮廓定义感兴趣的区域,请使用手绘线工具而不是多边形。确保增加笔画的宽度,以便在绘制时容易关闭轮廓。您可以通过向右移动 Stroke>Thickness slider 来做到这一点。

看起来像这样:

enter image description here

然后通过使用函数 FillingTransform 填充手绘轮廓的内部来创建蒙版,并像以前一样继续:

enter image description here

关于image-processing - 选择矩阵中感兴趣区域中的数据(使用 Mathematica),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6678814/

相关文章:

wolfram-mathematica - 防止 "Plus"重新排列东西

matrix - 在Mathematica中将坐标系转换为矩阵

wolfram-mathematica - 由 JLink 或 UseFrontEnd 生成的未捕获 throw

performance - Matlab:高效的图像 block 提取

image-processing - 改进图像像素分类的方法

wolfram-mathematica - 如何强制 Mathematica 在 Simplify 和 FullSimplify 中包含用户定义的函数?

从mathematica表中选择数据

python - 将 C++ OpenCV 转换为 Python

c++ - OpenCV matchTemplate minVal maxVal仅返回0和1

c++ - 洪水填充图像的图像处理