我使用图像处理提取边缘,然后使用提取边缘的 xclick 选择像素坐标。这是正确还是需要反向y轴坐标?(提取)边缘是黑色背景上的白色) 我想通过鼠标选择自动提取提取边缘的像素坐标。scilab中是否有可用的命令?(我使用canny边缘检测器和形态滤波器来提取边缘)
请给我一些建议
由于
答案 0 :(得分:1)
1。)是否反转y协调,取决于进一步处理。如果您只需要相对测量并且特征的真实方向不重要,则可以使用任何坐标系(例如,如果您只想计算物体或液滴,则顶部和底部的反转没有区别)。如果您想通过绘制点,线,或矩形(例如使用plot2d
或xrect
)或数字(例如使用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
编辑:针对您的具体形象: 请尝试以下代码:
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);
如果您使用阈值参数,您将看到如何找到更暗或更白的像素。