我想用Matlab解释我的问题。我的目标是在从照片坦克获得自由液面而要做到这一点,我已经使用这个算法:Matlab - 从边缘创建x,y曲线
A = 'C:\foto\img3.bmp';
B = imread(A, 'bmp');
figure(1), imshow(B);
C = rgb2gray(B);
level = graythresh(C);
bw = im2bw(C,level);
bw = bwareaopen(bw, 50);
figure, imshow(bw);
BW1 = edge(bw,'canny');
figure(2), imshow(BW1);
imwrite(BW1, 'C:\foto\im1_edge.bmp', 'bmp')
现在我有表面边缘为白色,与黑色的背景。 接下来我也只能检测白色像素的位置:
I= imread('C:\foto\img3_edge.bmp');
imshow(I);
[r c] =size(I);
for j=1:c
for i=1:r
if(I(i,j)==1)
[i j]
end
end
end
在这一点上,我怎么可以报告(含宏,自动可能)每对夫妇坐标的笛卡尔(x,y)平面?我的目标是从边缘获得重建的类型“y = f(x)”的函数。 我和另一个边缘尝试,并用油漆修改,删除所有无用像素的图像,例子是这样的一个:
http://i59.tinypic.com/20jh1g2.jpg
与代码:
I = im2bw(I);
它返回我的错误“警告:输入图像已经是二进制。”接下来使用的代码:
[r c] = find(I), output = [r c];
plot(r,c,'.')
我得到这一个:
http://i59.tinypic.com/2iqmqvl.jpg
此外,当我尝试在cftool插入R作为XDATA和c如YDATA,我得到了同样的问题,并且当我使用“Interpolant”装配,它会返回一个错误.....为什么?
请帮助我,谢谢大家! :-) PS:对不起,太长的帖子:)
使用'polynomial'这种类型的曲线 – Hoki 2014-09-20 10:16:56
您可以简化您的白点检测装修:取而代之的是两个for循环使用:* [行col] = find(I == 1)* – zinjaai 2014-09-20 12:23:02