0

如果我解释原因,这可能更有意义

我有一个逻辑矩阵 (103x3488) 输出的测量人员的照片已经通过边缘检测 (1=edge, 0=noedge)。旨在计算工作人员刻度之间的像素距离。问题,工作人员在中间下垂。

想法:用户输入五线谱每一端的坐标(使用ginput或其他东西)和凹陷的中点,然后如果这些点之间的边缘可以提取到数组中,我可以很容易地找到边缘的位置。

以这种方式从矩阵中提取数组的任何方法?

也欢迎其他想法,只使用matlab一个月,所以大多数功能我都不知道。

编辑:图片链接

它显示了矩阵的一小部分区域,因此在此示例中,1 和 2 是我想要在其间采样的点,我想返回沿红线出现的点。

干杯

4

2 回答 2

0

尝试这个

dat=imread('83zlP.png');

figure(1)
pcolor(double(dat))
shading flat
axis equal

% get the line ends
gi=floor(ginput(2))
x=gi(:,1);
y=gi(:,2);

xl=min(x):max(x); % line pixel x coords
yl=floor(interp1(x,y,xl)); % line pixel y coords


pdat=nan(length(xl),1);
for i=1:length(xl)
    pdat(i)=dat(yl(i),xl(i));
end

figure(2)
plot(1:length(xl),pdat)

peaks=find(pdat>40); % threshhold for peak detection
bigpeak=peaks(diff(peaks)>10); % threshold for selecting only edge of peak

hold all
plot(xl(bigpeak),pdat(bigpeak),'x')
meanspacex=mean(diff(xl(bigpeak)));
meanspacey=mean(diff(yl(bigpeak)));
meanspace=sqrt(meanspacex^2+meanspacey^2);

矩阵pdat给出了沿您选择的线的像素。meanspace是以像素为单位的边缘间距。根据图像,阈值可能需要调整。

于 2011-03-17T18:11:58.143 回答
0

看到图像后,我不确定您所指的“下垂”发生在哪里。图像已旋转,但您可以使用imrotate. 它需要旋转的程度应该足够容易;只需输入坐标AB使用反正切来找到从 0 度偏移的角度。

关于这些点,一旦它直线对齐,您需要做的就是在图像矩阵中指定一行(它将是一个 1 x 3448 向量)并用于find获取非零向量索引。由于旋转功能可能对像素进行了一些插值,因此每条“线”可能会获得多个索引,但它们可以识别为连续数字,您可以将它们平均以获得近似值。

于 2011-03-17T19:20:39.970 回答