24小时热门版块排行榜    

查看: 1195  |  回复: 8

afgh2587849

木虫 (小有名气)

[交流] 【求助】用graythresh函数遇到的问题 已有4人参与

graythresh函数是利用otsu's method算法计算出图像的一个阙值,可以用来区分图像的前景和背景部分。现在有个小问题没有解决,如果图像矩阵中的数据类型为double时,算出来的结果总是0.4980,不过help graythresh给出来的说明是:The input image I can be uint8, uint16, int16, single, or double, and it must be nonsparse.  现在我要处理的数据类型必须是double的,因为里面的很多数都大于65536,不能转换为uint8或者uint16,请问该如何操作?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

conanwj

版主 (著名写手)

将double值均匀映射到uint16

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
mze04532(金币+2):热心应助~奖励 2011-01-13 08:18:37
即使double类型数据大于65536,也可以做一个均匀映射,将double范围值映射到0~65536的。
映射函数很简单,LZ一定能搞定的吧^_^
引用回帖:
Originally posted by afgh2587849 at 2011-01-10 06:53:07:
graythresh函数是利用otsu's method算法

2楼2011-01-10 09:19:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

afgh2587849

木虫 (小有名气)

引用回帖:
Originally posted by conanwj at 2011-01-10 09:19:35:
即使double类型数据大于65536,也可以做一个均匀映射,将double范围值映射到0~65536的。
映射函数很简单,LZ一定能搞定的吧^_^



谢谢您的回答,不过均匀映射之后,我还是要将矩阵转换为uint16格式才能再用graythresh函数进行处理,这样许多数据就会被错误的四舍五入了吧,对最后计算出的阙值也会有很大影响
3楼2011-01-10 09:39:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cctt126

金虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
mze04532(金币+2):感谢热心,欢迎常来~ 2011-01-13 08:18:48
这样做,
th=graythresh(I( : ));
bw = im2bw(I,th);
有问题继续交流。

[ Last edited by cctt126 on 2011-1-12 at 22:02 ]
数学,英语,编程,没一样让我省心。。。
4楼2011-01-12 22:00:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pangpangx

新虫 (初入文坛)


小木虫(金币+0.5):给个红包,谢谢回帖交流
期待解答

[ Last edited by pangpangx on 2011-1-13 at 09:56 ]
5楼2011-01-13 09:50:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

afgh2587849

木虫 (小有名气)

引用回帖:
Originally posted by cctt126 at 2011-01-12 22:00:49:
这样做,
th=graythresh(I( : ));
bw = im2bw(I,th);
有问题继续交流。

[ Last edited by cctt126 on 2011-1-12 at 22:02 ]

same problem..
th=graythresh(I( : )); -->th = 0.4980
我这里的矩阵I是double类型,有很多元素大于65535

同样,如果用命令 I = double(imread('lena.jpg'));读入一幅灰度图像,
level = graythresh(I); or
level = graythresh(I( : ));  
level的值均为0.4980
多多交流
6楼2011-01-13 09:57:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cctt126

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
不是太明白你的问题,算出结果是0.4980,仅仅是一个比值,有什么问题吗?你希望算出的结果是多少呢?把图像和具体数据发上来,有针对性更好解决问题.

[ Last edited by cctt126 on 2011-1-13 at 14:24 ]
数学,英语,编程,没一样让我省心。。。
7楼2011-01-13 14:12:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

afgh2587849

木虫 (小有名气)

引用回帖:
Originally posted by cctt126 at 2011-01-13 14:12:31:
不是太明白你的问题,算出结果是0.4980,仅仅是一个比值,有什么问题吗?你希望算出的结果是多少呢?把图像和具体数据发上来,有针对性更好解决问题.

[ Last edited by cctt126 on 2011-1-13 at 14:24 ]

我在原来提出的问题里说过, 如果图像矩阵是double类型,算出来的结果就一直是0.4980, 这明显是不正确的吧?
help graythresh
The input image I can be uint8, uint16, int16, single, or double

其实随便拿两幅图像做一下就可以看到
I1 = double(imread('1.jpg')); thresh1 = graythresh(I1);
I2 = double(imread('2.jpg')); thresh2 = graythresh(I2);

then thresh1 和 thresh2 均为0.4980,对所有图像都是这样
8楼2011-01-14 05:02:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

afgh2587849

木虫 (小有名气)

我想我的问题是不是没说清楚

我现在有许多一系列矩阵,数据类型是double 想用graythresh函数来找矩阵中数值的分界点,但发现对double类型的矩阵用graythresh函数出来的结果都是0.4980,只有uint16或者uint8的矩阵能算出来有效值。但我的矩阵元素很多都是大于uint16的数据范围,所以没法转换。
同时,也没法将矩阵元素一一映射到1-65535内,因为映射之后还是要转换为uint16才能计算出有效值,那样很多小数就被四舍五入成整数了,算出来结果应该也是不正确的。
9楼2011-01-15 21:57:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 afgh2587849 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见