24小时热门版块排行榜    

查看: 1898  |  回复: 24

bluesea57

铁虫 (小有名气)

[求助] 求助使用MATLAB计算绿色叶片的覆盖度的问题

请教一下,不知哪位高手可以帮我计算一下附图中的绿色叶片占整张图片的百分率,最好是使用MATLAT软件,最好也能详细列出MATLAB计算的每一步程序,谢谢。绿色部分的阈值是R>=90,B>=90,G>=90

附图
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

希望在这里认识更多的朋友,共进步,共发展。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

【答案】应助回帖

★ ★ ★
余泽成(金币+3): 谢谢参与应助! 2011-11-13 21:42:40
CODE:
g = imread('1280476_1321176098_419.jpg'); %读入图像
r = (g(:,:,1)>=90) | (g(:,:,2)>=90) | (g(:,:,1)>=90); %注意黑色是0,白色是1
percent = ( 1739*1908 - sum(r(:)) ) / (1739*1908)

结果是0.2624,即26.24%

判定是叶子的部分如黑色部分所示

2楼2011-11-13 19:26:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★
余泽成(金币+2): 辛苦了! 2011-11-13 21:42:48
其实我觉得这个判定条件这么样子不好....你自己看着办吧...这样子是反过来选了,就是把“不是叶子的部分”选定为了1

因为matlab里面RGB值越大,越亮

所以最后计算的时候就是要这么减
3楼2011-11-13 19:31:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluesea57

铁虫 (小有名气)

引用回帖:
3楼: Originally posted by sudo at 2011-11-13 19:31:33:
其实我觉得这个判定条件这么样子不好....你自己看着办吧...这样子是反过来选了,就是把“不是叶子的部分”选定为了1

因为matlab里面RGB值越大,越亮

所以最后计算的时候就是要这么减

你好,你觉得怎样的判定条件会好一些呢?可以告诉我吗?
r = (g(:,:,1)>=90) | (g(:,:,2)>=90) | (g(:,:,1)>=90); 在程序中具体是啥意思,可以给解释一下吗?1739*1908 是不是代表像素数?谢谢!
希望在这里认识更多的朋友,共进步,共发展。
4楼2011-11-13 19:52:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-11-13 21:43:33
引用回帖:
4楼: Originally posted by bluesea57 at 2011-11-13 19:52:39:
你好,你觉得怎样的判定条件会好一些呢?可以告诉我吗?
r = (g(:,:,1)>=90) | (g(:,:,2)>=90) | (g(:,:,1)>=90); 在程序中具体是啥意思,可以给解释一下吗?1739*1908 是不是代表像素数?谢谢!

=,=不好意思,笔误。。。

r = (g(:,:,1)>=90) | (g(:,:,2)>=90) | (g(:,:,3)>=90);

分别代表R>=90,G>=90,B>=90的条件,把原来的图像映射为一个只有0和1的矩阵,其中0表示没满足条件的,也就是黑色的部分~

这个条件将就能用嗯,更好的条件要慢慢试才能试出来

1739*1908是表示像素数
5楼2011-11-13 20:04:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluesea57

铁虫 (小有名气)

引用回帖:
2楼: Originally posted by sudo at 2011-11-13 19:26:34:
[code]
g = imread('1280476_1321176098_419.jpg'); %读入图像
r = (g(:,:,1)>=90) | (g(:,:,2)>=90) | (g(:,:,1)>=90); %注意黑色是0,白色是1
percent = ( 1739*1908 - sum(r() ) / (1739*1908)
...

请教您一下,如果阈值同时满足:R大于等于23,小于等于75;G大于等于24,小于等于86;B大于等于22,小于等于67;且G>R>B。还是计算附件的图片中的绿色部分占整张图片的百分率,那计算程序又是哪一个呢?谢谢
希望在这里认识更多的朋友,共进步,共发展。
6楼2011-11-13 21:42:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-11-14 09:37:12
bluesea57(金币+3): 不错的帖子。 2011-11-14 09:56:07
引用回帖:
6楼: Originally posted by bluesea57 at 2011-11-13 21:42:16:
请教您一下,如果阈值同时满足:R大于等于23,小于等于75;G大于等于24,小于等于86;B大于等于22,小于等于67;且G>R>B。还是计算附件的图片中的绿色部分占整张图片的百分率,那计算程序又是哪一个呢?谢谢

举个简单的例子以便你理解~

首先我们定义一个2x2x2的三维数组吧
CODE:
a(:,:,1)=[10 20;30 40];
a(:,:,2)=[50 60;70 80];

这样,当你使用a(:,:,1)的时候,指的就是这个二维矩阵:
10 20
30 40

接下来我们看布尔运算
如果我写a(:,:,1)>=15,这个布尔表达式就返回一个各个元素与15比较大小的结果,如果>15则为真,即1,反之则假,得0,于是
CODE:
a(:,:,1)>=15

会得到一个矩阵
0 1
1 1

很容易理解吧?

再接下来就是位运算的问题了,我们先t=a(:,:,1),然后看看这样子会有什么效果:
CODE:
(t>=15) & (t<=35)

其中&运算的作用,就是与,1&1=1,1&0=0,0&1=0,0&0=0
于是上面的计算是这样的:
CODE:
[0 1]  &  [1 1]
[1 1]     [1 0]

对应的元素相与,计算结果就是:
0 1
1 0

OK,大概解说完毕,请楼主举一反三吧=,=....
7楼2011-11-13 22:17:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluesea57

铁虫 (小有名气)

谢谢,十分感谢!
希望在这里认识更多的朋友,共进步,共发展。
8楼2011-11-13 22:36:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
8楼: Originally posted by bluesea57 at 2011-11-13 22:36:08:
谢谢,十分感谢!

想问一下 这个像素数是如何得到的?
人生那么多不确定,你怕什么
9楼2011-11-14 18:47:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
5楼: Originally posted by sudo at 2011-11-13 20:04:50:
=,=不好意思,笔误。。。

r = (g(:,:,1)>=90) | (g(:,:,2)>=90) | (g(:,:,3)>=90);

分别代表R>=90,G>=90,B>=90的条件,把原来的图像映射为一个只有0和1的矩阵,其中0表示没满足条件的 ...

请问 这个像素数是如何得到的? 谢谢
人生那么多不确定,你怕什么
10楼2011-11-14 18:47:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 bluesea57 的主题更新
信息提示
请填处理意见