MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [求助]确定图像的中心并画几个同心圆 (https://www.labfans.com/bbs/showthread.php?t=6900)

bjpu 2009-03-17 20:07

[求助]确定图像的中心并画几个同心圆
 
图片是一个特殊广角照相机照的环形天空,我需要做的任务就是确定中心,并画出80°、70°、60°。。。等位线,图像的边缘代表15°。

我是一个初学者,还没入门,想请教诸位大侠:cool:
1.读入图像后,由于两边有黑色区域,怎么才能确定圆心呢?
2.怎么才能测出图像中这个圆的半径呢?直接利用size的话出来的是连着黑色区域一起的长度,怎么才能只测圆形区域的大小呢?
3.确定圆心和半径后,用什么命令才能把画出的线留在图像上呢?我利用hold on命令可以把画出的线留在图上,可是怎么用imwrite输出成一个新的图像呢?


[IMG]http://lh4.ggpht.com/_NWLImwBHJPU/Sb-E4bxDEDI/AAAAAAAAAB4/M1taOEt5eNo/s640/1.jpg[/IMG]

bjpu 2009-03-17 21:08

回复: [求助]确定图像的中心并画几个同心圆
 
希望大家不吝赐教。。。随便三言两语也可以。。。不一定要全部都回答。。。

真的,跪谢大家了。。。

webzhou 2009-03-17 22:40

回复: [求助]确定图像的中心并画几个同心圆
 
去这里找找[url]http://image.edu.topzj.com/index.php[/url]

bjpu 2009-03-18 00:35

回复: [求助]确定图像的中心并画几个同心圆
 
[QUOTE=webzhou;26346]去这里找找[url]http://image.edu.topzj.com/index.php[/url][/QUOTE]

谢谢,我去看了,但是没太找到合适的东西。。。不过还是谢谢。。。

silas_xue 2009-03-18 05:23

回复: [求助]确定图像的中心并画几个同心圆
 
2 个附件
lz 我想针对这三个问题
1 确定圆心,提供3种方法或者思路:
a.通过任取圆上三个点,连接组成一个内接三角形,然后计算三条边的中垂线的交点,这是几何的方法,当然,这要求你的三个点的选取要精确,当然,可以通过多次测量取平均值甚至是聚类来做,直接取平均值就可以了,聚类有点过了,相信,确定圆心对你来讲是基础,但是不能复杂度太高不是么?原理图解释在这里,你可以看一下。
b.取出圆的轮廓,即亦同时将图中二值化,任取圆上两点,分别寻找与此两点欧氏距离最远的两个点,可使用穷举法,因为无非是圆上循环一周嘛,只要什么时候,距离开始减小,最远点就找到了,连接形成对应的直径,交点就是圆心;
c.Hough变换,我想这个可能对于你来说也是可能便于后面的处理,你这里的广角图像其实可以理解为在极坐标下表示不是么?我们都知道Hough变换可以检测直线,它可以用来检测圆的,圆心也就在情理之中了,反用hough变换是一个inverse problem,但是可以解决,而且国内也有人把这个发了paper, 原理非常简单,你可以查一下数据库,比较经典的就是检测那张coin的图像。由于有一部分圆的边界你看不到,肯定要有些technical change。Anyway,this is a routine.

silas_xue 2009-03-18 05:31

回复: [求助]确定图像的中心并画几个同心圆
 
2 1如果你可以解决 2不是问题不是么?
3 你可以这样考虑这个问题,不是加线在图像上,而是画线,即将那些在等位线上的点的像素值改为你想要的等位线的颜色,比如说黑色,灰度图里就是255;还有一种就是叠加,即你在一副新的与该照片一样大小的图像上画好等位线(前提当然是已经解决1和2的情况下,即已经确定好圆心),然后叠加在当前图像上,需要注意的就是,数组值的溢出。

Thx for reading.
PS:若还算满意,直接点击“Thanks”,再次登陆时亦便于查看回答是否真的帮到你了。

bjpu 2009-03-18 06:48

回复: [求助]确定图像的中心并画几个同心圆
 
谢谢,太感谢了!给我提供了这么多的思路!

关于第三条,我之前也思考过,当我确定圆心后,我把与圆心坐标的欧氏距离等于我需要的r值的点都画成我需要的颜色,但是我觉得点和点的欧氏距离算出来的是一个近似值,肯定不能恰恰等于我所需要的r。举个例子,比如我算出的r=9.1,圆心是[0,0],那[0,9]这个点可以被标注下来吗?主要可能是我对于Matlab的算法还是不是很清楚。。。

关于叠加的方法,我试验了一下,简单的A+B出来的图形变了颜色,我不知道是不是需要进行某些转换,而且好像不仅仅是简单的叠加,也可以说是覆盖。。。

还是太感谢大侠了!

bjpu 2009-03-18 07:00

回复: [求助]确定图像的中心并画几个同心圆
 
关于确定圆心,我刚才也想了种方法,咱们交流一下,你看看是否能行。

我想的是利用黑色区域,因为黑色的[i,j,:]=0,所以用穷举算出左侧和右侧的端点。。。

不过感觉工作量还是很大的,不如提取圆形边缘省事儿,我再查一下提取圆形边缘的方法吧,起码有了思路,太感谢了。。。

silas_xue 2009-03-18 07:02

回复: [求助]确定图像的中心并画几个同心圆
 
nice problem, I think.

第一段 因为是离散图像 这个是难免的,因为总是要取整的,在图像旋转时和图形学上,这是一个很有趣的研究方向。除非图像interpolation,否则是有更好,没有最好。(广告词用一下, 澳柯玛~)

第二段 我的意思你可能已经基本明白了 不过 没有注意我的提醒哦 数组值 即 灰度值的范围 你这样相加 可是有越界的危险 越界后当然0开始 可以说求了一个255的补 当然颜色变掉了 越界了 大于255了怎么办 那么就在代码中加入 判断语句
if >255
=255
end if
或者向你所说 也是我的前一个说法 用另外一种颜色 即灰度值 覆盖就可以了

Thx for reading.
PS:若还算满意,直接点击“Thanks”,再次登陆时亦便于查看回答是否真的帮到你了。

bjpu 2009-03-19 01:23

回复: [求助]确定图像的中心并画几个同心圆
 
[QUOTE=silas_xue;26358]lz 我想针对这三个问题
1 确定圆心,提供3种方法或者思路:
a.通过任取圆上三个点,连接组成一个内接三角形,然后计算三条边的中垂线的交点,这是几何的方法,当然,这要求你的三个点的选取要精确,当然,可以通过多次测量取平均值甚至是聚类来做,直接取平均值就可以了,聚类有点过了,相信,确定圆心对你来...[/QUOTE]

能不能再跟我仔细说说怎么才能提取圆的轮廓。。。
我试着提取轮廓,出来的是所有的,而且不知道怎么选取圆的轮廓上的点,我用穷举检测,发现背景上有很多噪点,影响我检测的结果,总也不能自动取到圆上的点。。。

silas_xue 2009-03-19 04:47

回复: [求助]确定图像的中心并画几个同心圆
 
lz 不知道你是否先进行去噪处理了么? 这是预处理 实际处理时总是要做的
然后计算边缘 连接
或者
针对图像 我个人的观点 是否可以直接根据灰度值进行二值化segmentation 即周围的背景去噪后 应该斑点减少或者 或者基本没有了 然后 然后将灰度值较大的(这里需要一个阈值,估计可能你要多次实验找出阈值,可以参考直方图) 将比较亮的点直接变为一种颜色 这个方法比较容易理解 做起来也不过花些功夫而已 但是只是针对你的这幅图像来讲 因为毕竟背景的颜色非常暗
另外 一旦提取出圆了 尽管周围有噪点 还要进行一次去噪 或者 在你计算最远距离的条件上加一些修改 去除干扰 因为噪点很多都是单像素或者不连续的 你可以从这方面进行考虑

Thx for reading.
个人观点 仅供参考

bjpu 2009-03-19 07:22

回复: [求助]确定图像的中心并画几个同心圆
 
[QUOTE=silas_xue;26463]lz 不知道你是否先进行去噪处理了么? 这是预处理 实际处理时总是要做的
然后计算边缘 连接
或者
针对图像 我个人的观点 是否可以直接根据灰度值进行二值化segmentation 即周围的背景去噪后 应该斑点减少或者 或者基本没有了 然后 然后将灰度值较大的(这里需要一个阈值...[/QUOTE]

多谢指点!我马上去学习一下去噪的相关知识。。。感觉真是。。。项目使人进步啊。。。:ft:

silas_xue 2009-03-20 05:06

回复: [求助]确定图像的中心并画几个同心圆
 
lz 多多交流 共同进步


所有时间均为北京时间。现在的时间是 17:32

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.