有时候我们需要将图像取出⼀部分,⽽且每次可能还不⼀样,⽤代码取有些⿇烦,最好是能⽤⿏标画出这个区域,然后取出来。
matlab⾃带了⼀些⽤于图像交互式操作的函数,在这⾥记录⼀下;
1. getpt
作⽤:你⽤⿏标点击图像的某⼀像素,返回这个像素的位置
⽤法:[x,y] = getpts
⽰例:
img =imread('lena.jpg');
figure;imshow(img)
[x,y]= getpts;%x是列,y是⾏
2. getrect
作⽤:选取⼀个矩形区域
⽤法:p= getpts;p返回了四个数,依次为左上⾓像素的列,左上⾓像素的⾏,列长,⾏长,由这个四个值就能确定⼀个矩形区域。
⽰例:
img =imread('lena.jpg');
imshow(img)
p = getrect;%返回区域位置信息
p =round(p);
I =img(p(2):p(2)+p(4),p(1):p(1)+p(3));%索引图像
3. imcrop
作⽤:选取⼀个矩形区域,跟getrect差不多
⽤法:I = imcrop(img); 返回值I 就是你选取的⼦图像,不再是区域位置了。
⽰例:
img =imread('lena.jpg');
%imshow(img)
I =imcrop(img);%返回区域位置信息
上⾯是取点和矩形框的⽅法,以上函数已经能满⾜很⼤⼀部分需求了,有时候可能还需要提取其他形状,matlab还有很多截取图像的⽅法,我整理⼀下,⼤家有需求可以点链接。
函数名称作⽤
在图像上提取⼀个圆形区域
,提取⼀条直线
提取多条线(⽐如折线)
提取矩形区域一块操
提取椭圆区域
提取任意区域
提取多边形区域
如果⽤表⾥的函数,要注意⼀个问题,我们通常把⼀块图像提取出来,并不只是为了画出来,可能更多的是要⼦图像⾥边的值,但是表⾥的函数并没有直接把值取出来,这⾥我是inROI函数遍历原图像,具体例⼦:
path ='lena.jpg';
img =double(imread(path));
imshow(img/255)
h = drawpolygon %提取多边形⼦图像
data =[];
for i =1:size(img,1)
for j =1:size(img,2)
img_tar(i,j)=inROI(h,j,i);%ROI ⼆值图像if img_tar(i,j)==1
data =[data img(i,j)];%ROI⾥的数据 end
end
end
figure;imshow(img_tar)
发布评论