【问题标题】:Finding coordinates of each pixel using programming使用编程查找每个像素的坐标
【发布时间】:2014-07-15 13:32:00
【问题描述】:

使用编程(openCV或MATLAB)在下图中找到内圆(或外圆)每个像素的坐标的方法是什么?
imtool 提供此信息,但它是鼠标驱动的。

更新

我使用 imtool 来检测这些位置,方法是将鼠标光标放在圆圈上的每个点上并手动记录该值。但是我如何使用手动编程来做到这一点,我不能在圈子上这么多品脱。

【问题讨论】:

  • 你试过什么?您可以遍历所有像素,并检查它是否为黑色。

标签: matlab opencv


【解决方案1】:

在 Matlab 中,你可以这样做:

im = imread('im.png');      %# load image
[y,x] = find(all(im<5, 3)); %# find black pixels
position = [x,y];           %# display them

【讨论】:

  • 你能解释一下(im==0,3)吗?为什么 3 ?是因为你发现 r,g,b 值等于 0?
  • @gpuguy:参见all 的语法。它检查像素的所有值是否沿第三维(即所有颜色层)为零。
  • @gpuguy :正如@Junuxx 所说,all(A==0,3) 检查所有 3 种颜色(第三维)的值都是 0,这意味着颜色是黑色的。
  • im&lt;5 是一个更灵活的条件,如果 im.png 存储有损和/或圆圈已消除锯齿,im==0 可能会丢失几个像素。
  • 确实如此。我离开了==0,因为它适用于该图像。
【解决方案2】:

这里是使用 openCV 找到具有色相和饱和度过滤的对象的指南。 也许您可以将它与阈值黑色一起使用?

http://myrobotlab.org/content/opencv-how-isolate-object-hue-saturation-and-value

这里还有一种检测圆圈的方法:

http://cgi.cse.unsw.edu.au/~cs4411/wiki/index.php?title=OpenCV_Guide

【讨论】:

  • 我对检测形状不感兴趣。我只想获取圆圈上像素的位置。我可以使用 imtool,但它将是手动的;我必须将鼠标光标放在圆上的每个点上并记下位置 x、y。
【解决方案3】:

你可以实现这个代码...

a=rgb2gray(imread('image.tif'));
[x,y,z]=size(a);
count=0;
for i=1:x
    for j=1:y
        if a(i,j)==0
            count=count+1;
            new_x(count)=j;
            new_y(count)=i;
        end
    end
end

您可以从new_x & new_y获取坐标值

【讨论】:

  • 这是一个糟糕的解决方案! (1) 您没有预先分配new_xnew_y。 (2) 你使用嵌套循环。这完全是不是执行此类任务的 Matlab-ish 方式!
猜你喜欢
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2021-12-28
相关资源
最近更新 更多