xjzhang 发表于 2008-2-23 20:55

这个该怎么滤波?

http://pic.elmo.net.cn/zp/200822319404522.jpg
如上图所示,图中描述的是一个椭圆(知道椭圆方程)滑过一已知路径(椭圆不转动),求椭圆圆心轨迹
,换句话就是求椭圆与已知路径的接触时的最低点的坐标。
我考虑过用椭圆去包络这段已知路径,其实好像这样表述更正确一些,但是不知道包络后的圆心轨迹线怎么得到?
可以用滤波吗?该怎么做到!请指点!谢谢!

xjzhang 发表于 2008-2-24 09:47

图片可见了

如上图所示,图中描述的是一个椭圆(知道椭圆方程)滑过一已知路径(椭圆不转动),
求椭圆圆心轨迹
,换句话就是求椭圆与已知路径的接触时的最低点的坐标。
不知道如何下手,请指教!

bluedecember 发表于 2008-2-27 00:28

有点像形态学滤波
matlab 没有对一维信号的形态学函数我找了下 好像网上也没有
所以用它本来有的对二维图像的形态学函数试一下




[ 本帖最后由 bluedecember 于 2008-2-27 01:39 编辑 ]

xjzhang 发表于 2008-2-27 13:50

非常感谢!其实我想做的就是利用椭圆的外形来做几何学上的滤波。对于您所提及到的二维图像的形态学函数能具体的介绍一下吗?推荐基本参考书吧。我以前没有做过滤波,对于您所提到的更不了解。

bluedecember 发表于 2008-2-27 16:37

%路径y,采样点距为t
t=0:0.01:5;
y=0.2*sin(2*pi*3*t)+0.8*(t-3).^2;
ymin=min(y);ymax=max(y);
figure;
subplot(3,1,1);plot(y);title('noised signal');
axis();
axis off


%转换为二值图像表示
n=length(y);
avg=(ymax-ymin)/n;
z=round(y./avg);
m=max(z)-min(z)+1;
I=zeros(m,n);
for i=1:n
    for j=1:max(z)-z(i)
      I(j,i)=1;
    end
end
subplot(3,1,2);
imagesc(I);title('转化为图像');axis off

%使用matlab中的Image Processing
SE=strel('disk',30);%定义一个圆盘膨胀结构元素
J=imerode(I,SE);
subplot(3,1,3);imagesc(J);title('形态学滤波');axis off

bluedecember 发表于 2008-2-27 16:38

matlab没有定义椭圆结构元素
这个可能要依据采样点距,椭圆半径,椭圆移动的步进 自己写

xjzhang 发表于 2008-2-27 18:59

非常感谢!

xjzhang 发表于 2008-3-1 12:24

回复 6楼 的帖子

谢谢您的精彩回复,不过我不知道怎么把这个二进制的图像文件在转化为数据文件?请您继续解答。谢谢!

xjzhang 发表于 2008-3-1 14:39

在你的程序的提示下,我好想想明白了,将二制图像在距证中的坐标还原回去,在乘上比例尺就好了。不过对于这种形态学滤波还是不大明白它的原理,使用一个个单元去历经他吗?能推荐几本参考书吗?谢谢!我自己做了几个简单的图形,比如说正方形,让椭圆去历经应该是有圆弧的,但是我得到的图像是一个变大了的长方形?怎么回事?

bluedecember 发表于 2008-3-2 20:24

我对一维形态学滤波也很感兴趣,但没有时间深入了解。所以上面写的程序是以方便为原则 借用图像工具箱的形态学算子做的一维滤波

你搜索 数学 形态学 这种书很多 从提出到现在已经 50年了。 你搞清楚 open 和 close的概念 剩下的 erode dilate 也很好理解,具体可以看matlab里的帮助
ISO16610系列里有morphology filter 的概念,应用 你可以找找看

至于最后一个问题 你贴上代码 来看看

xjzhang 发表于 2008-3-3 19:20

首先感谢您的一直关注和解答。具体的请见附件,我想把二制图像在还原成数据点的时候,这个比例尺在选区的时候我感觉差了点什么,因为前面转化成二制图像的时候,这个圆整后的图像在还原的
时候的截断误差怎么考虑?

[ 本帖最后由 xjzhang 于 2008-3-3 19:36 编辑 ]

xjzhang 发表于 2008-3-3 19:23

clear
clc
%路径y,采样点距为t
% t=0:0.01:2;
% y=0.2*sin(2*pi*3*t)+0.8*(t-3).^2;
t=0:0.01:6;
% % y=10*sin(2*pi*t);
y=[];
for i=1:length(t)
    if(t(i)<2)
      y(i)=0;
    elseif (t(i)<4)
      y(i)=10;
    else
      y(i)=0;
    end
end
ymin=min(y);ymax=max(y);
h=figure(1);
subplot(3,1,1);plot(y);title('noised signal');
axis();
axis off

%转换为二值图像表示
n=length(y);
avg=(ymax-ymin)/n; %获得Y轴的比例尺
z=round(y./avg);
m=max(z)-min(z)+1;
I=zeros(m,n);
for i=1:n
    for j=1:max(z)-z(i)
      I(j,i)=1;
    end
end
subplot(3,1,2);
imagesc(I);title('转化为图像');axis off
%使用matlab中的Image Processing
SE=strel('disk',30,4);%定义一个圆盘膨胀结构元素
J=imerode(I,SE);
subplot(3,1,3);imagesc(J);title('形态学滤波');
axis off
out_y=[];
=size(J);
for k=1:N
    for l=1:M
      if (J(l,k)==0)
      out_y(k)=(M-l).*avg;
      break
      end               
    end
end
h1=figure(2);
plot(t,out_y,'b',t,y,'k');
axis();

ChaChing 发表于 2009-10-1 00:04

有权的人是否考虑下, 将这几个相同帖整合一下
方便後来学习者看
http://forum.vibunion.com/forum/viewthread.php?tid=58993&highlight=
http://forum.vibunion.com/forum/viewthread.php?tid=58994&highlight=
http://forum.vibunion.com/forum/viewthread.php?tid=58995&highlight=
http://forum.vibunion.com/forum/viewthread.php?tid=58996&highlight=
页: [1]
查看完整版本: 这个该怎么滤波?