作业帮 > 综合 > 作业

matlab中选取圆形区域

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/09 18:53:38
matlab中选取圆形区域
[Im1,PathName1] = uigetfile('*.jpg;*.tif;*.bmp','请输入条纹图像');
Im=imread(Im1);Im=double(Im);Im=Im(:,:,1);[m,n]=size(Im);
%imshow(A,[]);
k1=150;k2=150;%设定k1、k2方便取一级频谱
%figure;imshow(A(k1:m-k1,k2:n-k2),[]);
%手动选取滤波区域,双击结束选取
%BW=imcrop(A);
%BW=jianqie(A,k1,k2);%矩形选取滤波区域
BW=roipoly(A(k1:m-k1,k2:n-k2));%多边形选取滤波区域
BW2=zeros(m,n);
BW2(k1:m-k1,k2:n-k2)=BW;
figure;imshow(BW2,[]);
这个是我师哥以前写的程序,其中imcrop可以提取矩形区域,jianqie就是一个简单的提取矩形的程序,roiploy可以提取多边形,我想问问,可不可以直接提取圆形啊?我知道多边形多画几条边就可以无限接近于圆,但是效果并不好,有没有一笔直接画出圆形的?
哎,看来我上次没给你的问题解决彻底啊...

这个肯定是你想要的了,把这个function保存成.m文件.
它会让你选两个点,第一个点是圆心,第二个是圆上任意一点.

function roi = roicircle(img);
figure;imshow(img);
[y,x] = meshgrid(1:size(img,1),1:size(img,2));
p = ginput(1);
hold on; plot(p(1),p(2),'b*');
hold off;
p = [p; ginput(1)];
t_r = norm(p(2,:)-p(1,:));
[t,r] = cart2pol(y-p(1,1),x-p(1,2));
t(r>t_r) = nan;
r(r>t_r) = nan;
[yn,xn] = cart2pol(t,r);
roi = ~isnan(xn);

使用:

[Im1,PathName1] = uigetfile('*.jpg;*.tif;*.bmp','请输入条纹图像');
Im=imread(Im1);Im=double(Im);Im=Im(:,:,1);[m,n]=size(Im);
%imshow(A,[]);
k1=150;k2=150;%设定k1、k2方便取一级频谱
%figure;imshow(A(k1:m-k1,k2:n-k2),[]);
%手动选取滤波区域,双击结束选取
%BW=imcrop(A);
%BW=jianqie(A,k1,k2);%矩形选取滤波区域
BW=roicircle(A);%%%%%%圆形选取滤波区域%%%%%%%
figure; imshow(BW,[]);
再问: 大神,圆能提取了,因为我下边要对提取出的图形进行滤波,但是程序一往下走就出错,咱能单独聊聊吗?您把qq号或者邮箱给我,我把完整的程序发给您,多谢啦!
再答: function roi = roicircle(img);
figure;imshow(img);
[y,x] = meshgrid(1:size(img,1),1:size(img,2));
p = ginput(1);
hold on; plot(p(1),p(2),'b*');
hold off;
p = [p; ginput(1)];
t_r = norm(p(2,:)-p(1,:));
[t,r] = cart2pol(y-p(1,1),x-p(1,2));
t(r>t_r) = nan;
roi = ~isnan(t);之前那个写多了。有几句废话。你可以发我邮箱jiaoheng1126艾特gmail点com