当前位置:编程学习 > Matlab >>

MATLAB 局部图像处理

我想将下图中的四个圆内的部分进行中值滤波,圆外的部分不要了。就是说,想用圆框框出那四个圆,只处理圆内区域的图像,怎么把那部分圈出来?程序怎么写?圆边框线用红色,然后后序处理程序都只在圆框内进行。
追问:挺好的。不过还想问一下你会多边形提取吗?因为边缘对后面程序 的影响太大,所以我想把现有的圆半径缩小,去掉影响太大的边缘,可以写下程序 吗?我给你追加50分。后面出来的图我看了,不是这样的,只能是要么四个圆的半径一起缩小,要一致,不能选择性的去掉影响大的部分,因为我后面是要用二值化提取的起球部分的面积/总面积,得出我要的比例,你这样的话,如果我换张图片,很可能对比不公平,那样就不是误差而是错误了,不知道你明不明白。所以我要的是半径减小,不是直接去掉一部分。不要光给我思路,程序怎么写?不光要思路,最重要程序?我之后还要对圆内的像素求面积我C很烂,MATLAB也是因为毕设才学的,也很烂,你写的这么委婉,我当然不懂,你能写成MATLAB的吗?最好是我直接添加进我现有的程序里。我上一个处理完的图像变量名为bg1。是边缘处理的,能看见我要处理的四个圆的轮廓。这是你自己的还是COPY别人的?我见过这个,还是不会用……没出来我要的效果,你会改吗?
其他:可以直接处理呀,不用管周围,因为黑色都是灰度为零的啊,对整幅图像中值滤波,在用edge函数取边,对边缘的红色分量增加到最大,其余绿色和蓝色分量将为零(灰度图像不用分),在画出整幅图就ok啦,以后处理的时候也不会对其他位置的像素值有太大影响。 很简单的, 因为你的图中的圆不是标准的规范的圆, 用圆的方程之类的方法话边框反而不好, 直接遍历图像中所有像素, 如果相邻像素的像素值相差超过了一定的阈值(自己试一下, 我感觉至少有50以上), 就把这个点标记成红色. 以后处理的时候判断一下当前经过的红色点的个数, 偶数个肯定是圆框外的部分, 奇数个就在圆框内的部分. 
       比如说我现在遍历到了图像的第二行, 一开始我没有遇到红色点, 红色像素点个数累积为0. 这时就不用做图像处理, 等到遇到了第一个红色像素, 这时我们就进入了图中第一个圆的区域中, 然后开始做处理, 下次遇到红色点就表示离开了圆形区域. 后面的同样道理 
把1楼的程序用2次,就实现了2次子区域滤波。

a=imread('待分割滤波处理图片.图片格式');
gaussianFilter=fspecial('gaussian',[7,7],5); %设置滤波器

%读出a中待滤波区域1:  10:100,20:120分别为y,x的区间,
b=a(10:100,20:120);
c=imfilter(b,gaussianFilter,'symmetric','conv')%滤波
a(10:100,20:120)=c; %读回

%读出a中待滤波区域2:10:100,120:220分别为y,x的区间,
b=a(10:100,120:220);
c=imfilter(b,gaussianFilter,'symmetric','conv'); %滤波
a(10:100,120:220)=c;  %读回

%二值化,假设阈值为150

d=find(I<150);
I(d)=0;
d=find(I>=150);
I(d)=255; 

上一个:matlab程序 就是利用对数扩展对比度
下一个:matlab怎样求特征方程的特征值和特征向量?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,