在scilab中提取像素坐标

时间:2015-03-12 16:49:12

标签: scilab

我使用图像处理提取边缘,然后使用提取边缘的 xclick 选择像素坐标。这是正确还是需要反向y轴坐标?(提取)边缘是黑色背景上的白色) 我想通过鼠标选择自动提取提取边缘的像素坐标。scilab中是否有可用的命令?(我使用canny边缘检测器和形态滤波器来提取边缘)

请给我一些建议

由于

1 个答案:

答案 0 :(得分:1)

1。)是否反转y协调,取决于进一步处理。如果您只需要相对测量并且特征的真实方向不重要,则可以使用任何坐标系(例如,如果您只想计算物体或液滴,则顶部和底部的反转没有区别)。如果您想通过绘制点,线,或矩形(例如使用plot2dxrect)或数字(例如使用xnumb)来指示您找到的要素,请通过图像,然后有必要匹配两个坐标系。我建议使用第二个选项并将结果绘制在原始图像上,因为这是检查结果的最简单方法。 2.)可以通过find函数进行自动坐标提取:它返回矩阵的那些索引,表达式为真。

IM=[0,0,0,1;0,0,0,1;0,1,1,1;1,1,0,0];   //edge image, edge = 1, background = 0
disp(IM,"Edge image");
[row,col]=find(IM==1);    //row & column indices where IM = 1 (= edge)
disp([row',col'],"Egde coordinates (row, col)");

如果您的“Egde图像”标记边缘不是1(或255,纯白色像素)但具有相对较高的数字(亮像素),那么您可以修改find函数的逻辑表达式检测值高于某个阈值的像素:

[row,col]=find(IM>0.8);    //if edges > a certain threshold, e.g. 0.8

编辑:针对您的具体形象: enter image description here 请尝试以下代码:

imagefile="d:\Attila\PROJECTS\Scilab\Stackoverflow\MORPHOLOGICAL_FILTERING.jpg";
//you have to modify this path!
I=imread(imagefile); 
IM=imcrop(I,[170,100,950,370]);   //discard the thick white border of the image
scf(0); clf(0);
ShowImage(IM,'cropped image');
threshold=100;    //try different values between 0-255 (black - white)
[row,col]=find(IM>threshold);
imheight=size(IM,"r");   //image height
row=imheight-row+1;   //reverse y axes coordinates (0 is at top)
plot2d(col,row,style=0);  //plot over the image (zoom to see the dots)
scf(1); clf(1);  //plot separate graph
plot2d(col,row,style=0);

如果您使用阈值参数,您将看到如何找到更暗或更白的像素。