一幅图像,我们需要处理的区域可能只占整幅图像的一小部分,通过鼠标进行手动选取,展示图像,并且获得ROI图像的起始行列坐标。
%输入原图像------------------------------------------
img = imread('6.bmp'); %读取原图像
%选取图像的ROI区域-----------------------------------
figure(1);
imshow(img);title('待处理图像'); %①
h=imrect; %鼠标变成十字,用来选取感兴趣区域,图中就会出现可以拖动以及改变大小的矩形框,选好位置后
pos=getPosition(h); %pos有四个值,分别是矩形框的左下角点的坐标 x y 和 框的 宽度和高度
img_ROI = imcrop(img, pos); %拷贝选取图片,pos[左下角坐标(x,y),宽,高]
figure(2);
imshow(img_ROI);title('激光光条区域(图像ROI区域)');
imwrite(img_ROI,'laser_ROI.bmp');%保存ROI图像 ②
row_start = floor(pos(1,2)); %ROI图像的起始行列
column_start = floor(pos(1,1)); %为后面ROI区域坐标转换回原图像坐标值准备
程序中个别算子介绍:
①
1.imrect——创建可变形矩形
2.使用 imrect 和 imcrop 函数相结合,就可以实现截图功能。
3.
h = imrect;
pos = getPosition(h);
img_ROI = imcrop(img, pos);
这个函数用来获取图象上特定区域的坐标,其中pos的返回值中有四个参数[xmin,ymin,width,height],特定区域的左下角x,y坐标,以及该区域的长宽值。
②
floor函数
向负无穷方向取整,floor(2.2)=2,floor(-2.2)=-3
程序中选中的框框的角点坐标是相邻两个像素的均值,即是小数(举例:(1 + 2)/ 2 = 1.5),我们需要的是像素级坐标,所以利用floor()取整。
上面是选取的ROI区域,我们可以看到边缘线之间还有一条线,即出现(**.5)的现象。