声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3366|回复: 14

[图像处理] 求助,急急急 ,关于MATLAB求面积的

[复制链接]
发表于 2009-5-21 22:00 | 显示全部楼层 |阅读模式

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

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

x
MATLAB求图形面积的命令是什么啊???  跪求了。。。
书上说   BW=imread('123.jpg')
               area=bwarea(BW)

可是为什么我输了总是说错误呢  出现红色的
??? Subscripted assignment dimension mismatch.
Error in ==> bwarea at 40
bb(2:end-1,2:end-1) = b;
真的很着急,,哪位大侠救救我吧 。。。。。
回复
分享到:

使用道具 举报

发表于 2009-5-21 22:04 | 显示全部楼层
bwarea函数是求二值图像中前景图像的面积,你的图像不是二值图像,是真彩图像吧,应该先转为二值图像。

评分

1

查看全部评分

 楼主| 发表于 2009-5-21 22:08 | 显示全部楼层
是二值图象,背景是黑色的,图形是白色的。
求白色部分的面积。。。
发表于 2009-5-21 22:12 | 显示全部楼层
背景是黑色的,图形是白色的图像不一定就是二值图像,你用size(BW)看看BW是几维的。
你的错误我在底下验证过。
 楼主| 发表于 2009-5-21 22:24 | 显示全部楼层
多谢, 果然是这个问题,这图象我原先换成了二值图像后来保存了JPG格式的,
重新载入进去了就忘了再换了,现在可以了。亲你一口,真的非常感谢!!!!!!:kiss:

额。。。。
可是结果求出来是area=bwarea(I3)
area =  5.5536e+003
那这个e和003是代表什么意思呢??

[ 本帖最后由 ChaChing 于 2009-5-23 12:39 编辑 ]
发表于 2009-5-21 22:28 | 显示全部楼层
受不了啦,5.5536e+003就是5.5536乘以10的三次方
 楼主| 发表于 2009-5-21 22:39 | 显示全部楼层
额。。。还有这样的说法,实在不好意思,功力不到家。。。呵呵。。

问题又来了555555555
作填充操作的时候怎么把1和0变一下啊 ?
填充完了发现本来黑的变成白的了,本意是想把白的里面那些黑点点填成白色的的。。。
还有就是求周长的命令是什么啊 ??

[ 本帖最后由 ChaChing 于 2009-5-23 12:40 编辑 ]
发表于 2009-5-21 22:59 | 显示全部楼层
把图像从中间分成两半,分别填充应该能满足要求,
求周长用regionprops函数
 楼主| 发表于 2009-5-21 23:09 | 显示全部楼层
不会,可不可以直接告诉我命令 ??我真太笨了。。。
发表于 2009-5-21 23:21 | 显示全部楼层
给你一个例子吧,附件中是一幅CT图像,骨骼中有孔洞,运行下面代码,提取骨骼,填补骨骼中孔洞,求骨骼外边缘周长
  1. I = imread('ct019.JPG');
  2. BW = im2bw(I,0.3);
  3. [m,n] = size(BW);
  4. figure(1)
  5. imshow(BW)
  6. [ybb,xbb] = find(BW);  %提取图像坐标
  7. nxx = min(xbb);  %图像上最左边点的横坐标
  8. meanxx = round(mean(find(xbb==nxx)));
  9. nbb = ybb(meanxx);  %图像上最左边点的纵坐标
  10. %填充内外边界的内部
  11. BW(1:nbb,1:n) = bwfill(BW(1:nbb,1:n),'holes');
  12. BW(nbb+1:m,1:n) = bwfill(BW(nbb+1:m,1:n),'holes');
  13. %二值图像标注
  14. L = bwlabel(BW);
  15. %求周长
  16. Perimeter = regionprops(L,'Perimeter')
  17. figure(2)
  18. imshow(BW)
复制代码

[ 本帖最后由 ChaChing 于 2009-5-23 12:46 编辑 ]
ct019.JPG

提取与修补后效果图

提取与修补后效果图

评分

1

查看全部评分

 楼主| 发表于 2009-5-21 23:37 | 显示全部楼层
看是差不多能看懂了,不过跟我的问题有点出入,我就不知道该怎么取舍了。你看看我的图吧,我就是想把白色里面那点黑色也填白了,变成整个的白色封闭的区域。
123.jpg
 楼主| 发表于 2009-5-21 23:45 | 显示全部楼层
我按你的命令试了,效果很好,十二万分的感谢,总之太谢谢你了。。。

可是求周长的结果是
Perimeter =

2x1 struct array with fields:
    Perimeter

这该怎么理解?

[ 本帖最后由 ChaChing 于 2009-5-23 12:49 编辑 ]
321.jpg
发表于 2009-5-22 07:55 | 显示全部楼层
你为什么不好好看看regionprops的用法呢,当你的二值图像中有p个孤立的连通区域时,求出的周长
Perimeter =
px1 struct array with fields:

我看你的图片没必要分成两半填充,另外你可以用bwareaopen函数去除干扰点,然后再求周长,具体用法自己查一下帮助吧,我只能给你说一个大方向,不可能具体到给你编每一个程序,望理解。

评分

1

查看全部评分

 楼主| 发表于 2009-5-24 19:02 | 显示全部楼层
怎么换了个图就不行了?
填充完了中间还是黑的。。。
说实话吧,我接触MATLAB还不到一个星期,还是没老师,自己看书学,根本啥都不懂。。。
E4123EW.jpg
1234EDFSS.jpg
 楼主| 发表于 2009-5-25 00:18 | 显示全部楼层
为什么有的图可以把里面的黑空都填上,有的图却只能填掉一点点呢??
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-30 02:08 , Processed in 0.102831 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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