声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1212|回复: 8

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

[复制链接]
发表于 2007-4-7 09:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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, 重复上面的工作,直到 两部分的均值不再变化  
高手 指点一下吧 小弟刚学
回复
分享到:

使用道具 举报

发表于 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语言的。
 楼主| 发表于 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 编辑 ]
发表于 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去掉
 楼主| 发表于 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 编辑 ]
发表于 2007-4-7 12:03 | 显示全部楼层
原帖由 程序255 于 2007-4-7 11:57 发表
楼上 C怎么 回事啊


要赋初值


  1. T=120; T1=110;
  2. while T>T1|T<T1
  3.     T=T1;
  4.     C=0;
  5.     R=0;
  6.     for i=1:m
  7.         for j=1:n
  8.             if bb(i,j)>T
  9.                 R=R+bb(i,j);p=p+1;
  10.             else
  11.                 C=C+bb(i,j);q=q+1;
  12.             end
  13.         end
  14.         T1=R/(2*p)+C/(2*p);
  15.     end
  16. end
复制代码
发表于 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 编辑 ]
 楼主| 发表于 2007-4-7 14:02 | 显示全部楼层
好佩服 啊  我有好多函数都不知道哎   想给你加人气
发表于 2007-4-7 15:52 | 显示全部楼层
原帖由 程序255 于 2007-4-7 14:02 发表
好佩服 啊  我有好多函数都不知道哎   想给你加人气


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


至于加人气,普通会员也应该有权限吧,就是每个帖子右下角那个向上的绿色箭头
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-20 01:57 , Processed in 0.167819 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表