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-
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/22 21:55:24
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-
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可以提取多边形,我想问问,可不可以直接提取圆形啊?我知道多边形多画几条边就可以无限接近于圆,但是效果并不好,有没有一笔直接画出圆形的?
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-
哎,看来我上次没给你的问题解决彻底啊...
这个肯定是你想要的了,把这个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,[]);