程序255 发表于 2007-4-7 09:48

大家看看我这个选阈值的小循环哪里错了 有更简单的万分感激

while T>T1|T<T1
    T=T1;
   
   for i=1:m
      for j=1:n
            if bb(i,j)>T
                R=R+bb(i,j);p++;
            
            else C=C+bb(i,j);q++;
end
end
            T1=R/(2*p)+C/(2*p);   
end
???               R=R+bb(i,j);p++;
                                 |
Error: Incomplete or misformed expression or statement.

T1给个初始值 不与T相等的
主要思路是 :先选择一个近似阈值T,将图象分割成两部分R和C, 计算R和C的均值, 然后取他们和的一半做为新的T, 重复上面的工作,直到 两部分的均值不再变化
高手 指点一下吧 小弟刚学

pengweicai 发表于 2007-4-7 09:52

while T>T1|T<T1
    T=T1;

    for i=1:m
      for j=1:n
            if bb(i,j)>T
                R=R+bb(i,j);p=p+1;
            else
                C=C+bb(i,j);q=q+1;
            end
      end
      T1=R/(2*p)+C/(2*p);
    end
end

首先MATLAB不是C++,它是基于C语言的。

程序255 发表于 2007-4-7 10:47

高手 看下

:victory: xiexie
给T1 初始的命令是什么 啊

int T=120; T1=110
while T>T1|T<T1
    T=T1;
    for i=1:m
      for j=1:n
            if bb(i,j)>T
                R=R+bb(i,j);p=p+1;
            else
                C=C+bb(i,j);q=q+1;
            end
      end
      T1=R/(2*p)+C/(2*p);
    end
end
??? Error using ==> sym.maple
Error, (in int) wrong number (or type) of arguments

Error in ==> sym.int at 39
   r = reshape(maple('map','int',f(:),x),size(f));

Error in ==> char.int at 9
y = int(sym(f),varargin{:});

[ 本帖最后由 ChaChing 于 2009-7-8 23:47 编辑 ]

eight 发表于 2007-4-7 10:53

原帖由 程序255 于 2007-4-7 10:47 发表
int T=120; T1=110
while T>T1|T<T1
    T=T1;
    for i=1:m
      for j=1:n
            if bb(i,j)>T
                R=R+bb(i,j);p=p+1;
            else
                C=C+bb(i, ...


matlab定义变量的方式与C语言不同,把int去掉

程序255 发表于 2007-4-7 11:57

谢谢 eight 我没看到你的回复 别放心上

=120; T1=110
while T>T1|T<T1
    T=T1;
    for i=1:m
      for j=1:n
            if bb(i,j)>T
                R=R+bb(i,j);p=p+1;
            else
                C=C+bb(i,j);q=q+1;
            end
      end
      T1=R/(2*p)+C/(2*p);
    end
end

T1 =

   110

??? Undefined function or variable "C".

楼上 C怎么 回事啊

[ 本帖最后由 ChaChing 于 2009-7-8 23:52 编辑 ]

eight 发表于 2007-4-7 12:03

原帖由 程序255 于 2007-4-7 11:57 发表
楼上 C怎么 回事啊

要赋初值


T=120; T1=110;
while T>T1|T<T1
    T=T1;
    C=0;
    R=0;
    for i=1:m
      for j=1:n
            if bb(i,j)>T
                R=R+bb(i,j);p=p+1;
            else
                C=C+bb(i,j);q=q+1;
            end
      end
      T1=R/(2*p)+C/(2*p);
    end
end

eight 发表于 2007-4-7 12:15

你的循环条件太苛刻(两个浮点数要严格相等),只会陷入死循环,因此我作了一下修改,顺便去掉无谓的循环。至于T和T1的初值问题,自己调整一下吧。

T=120; T1=110;
iEpson = 1e-02;
while abs(T-T1)>=iEpson
    T=T1;
    temp = bb>T;
    p = mean(bb(temp));
    q = mean(bb(~temp)));
    T1= (p+q)/2;
end

[ 本帖最后由 eight 于 2007-4-7 15:50 编辑 ]

程序255 发表于 2007-4-7 14:02

好佩服 啊我有好多函数都不知道哎   想给你加人气

eight 发表于 2007-4-7 15:52

原帖由 程序255 于 2007-4-7 14:02 发表
好佩服 啊我有好多函数都不知道哎   想给你加人气

呵呵,过奖:loveliness: 。matlab跟C等语言有很大不同,你学了以后就会慢慢知道


至于加人气,普通会员也应该有权限吧,就是每个帖子右下角那个向上的绿色箭头
页: [1]
查看完整版本: 大家看看我这个选阈值的小循环哪里错了 有更简单的万分感激