24小时热门版块排行榜    

查看: 1202  |  回复: 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的回帖

afgh2587849

木虫 (小有名气)

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

我现在有许多一系列矩阵,数据类型是double 想用graythresh函数来找矩阵中数值的分界点,但发现对double类型的矩阵用graythresh函数出来的结果都是0.4980,只有uint16或者uint8的矩阵能算出来有效值。但我的矩阵元素很多都是大于uint16的数据范围,所以没法转换。
同时,也没法将矩阵元素一一映射到1-65535内,因为映射之后还是要转换为uint16才能计算出有效值,那样很多小数就被四舍五入成整数了,算出来结果应该也是不正确的。
9楼2011-01-15 21:57:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

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的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见