-
2020-12-19 08:15:34
龙源期刊网
http://www.qikan.com.cn
基于
Matlab
的图像感兴趣区域提取
作者:刘丽
苏赋
田芳
卢阿娟
来源:《现代电子技术》
2013
年第
08
期
摘
要:
在图像中精确提取出用户感兴趣的区域,消去无关背景对目标区域的影响,有助
于提高后续图像分析与处理的精度。在此介绍了差影法、交互提取法、自动图像分割提取法
3
种方法实现对图像感兴趣区域的提取,并分析了各自的实现过程和提取效果,为图像感兴趣区
域提取算法的进一步研究提供参考。
关键词:
感兴趣区域;
差影法;
交互式提取;
阈值分割
中图分类号:
TN919
⁃
34
;
TP751
文献标识码:
A
文章编号:
1004
⁃
373X
(
2013
)
08
⁃
0117
⁃
04
随着信息社会的发展,大量具有摄像功能的电子产品迅速普及,图像数据呈现几何级数的
增长趋势,图像因此成为科研和生活中承载信息的重要载体。一幅图像包含的数据非常丰富,
但由于关注的角度不同,同一幅图像的不同部分对不同的人来说意义不同。如何在图像中提取
出自己感兴趣区域的图像特征,精确描述感兴趣目标区域所蕴含的数据信息,弱化背景对目标
图像的干扰,便于对这一区域做进一步的处理,成为图像处理中一个重要的研究热点。
1
感兴趣区域
感兴趣区域(
Regions of Interest
,
ROI
)这一概念,是指图像中最能引起用户兴趣、最能
表现图像内容的区域。感兴趣区域(
Regions of Interest
,
ROI
)就是图像中表现图像主要内
容、人们最感兴趣的那一部分区域
[1]
,这些关键区域称为感兴趣区域。图像感兴趣区域的提
取具有以下特点
[2]
:
(
1
)感兴趣区域并没有十分严格的定义。对于同一幅图像而言,在不同的应用背景下,
人们的关注角度不同,对图像的具体需求也相应会有所不同,因此会按各自的需求定义图像中
的感兴趣区域。
(
2
)现有的感兴趣区域算法都依赖于图像的颜色、形状、纹理等底层特征。由于图像的
语义特征获取并没有特别有效的算法,现阶段感兴趣区域的检测和提取大多基于感兴趣区域所
具有的低层特征。
对图像
ROI
的提取,一般从两方面着手解决:一是利用图像分割技术提取
ROI
;另外一
个就是从人眼的视觉特性出发,通过模拟人眼的视觉特点,寻找特定的视觉敏感区域,并将这
些视觉敏感区域排序作为
ROI[3]
。
更多相关内容 -
MATLAB截取图像特定区域
2019-04-14 23:22:16MATLAB截取图像特定区域 你好!你可以仔细阅读这篇文章,了解一下MATLAB的截取图像的特定区域的方法。 二话不说先上代码 代码片. save_path='D:\picture\'; img_path_list = dir(strcat(save_path,'*....MATLAB截取图像特定区域
你好!你可以仔细阅读这篇文章,了解一下MATLAB的截取图像的特定区域的方法。
截取程序
imcrop函数
功能:用于返回图像的一个裁剪区域。可把图像显示在一个图像窗口中。
代码片示例
.picture_1 =imcrop(picture,[x(1),y(1),abs(x(1)-x(2)),abs(y(1)-y(2))]) %切割图像,起始坐标点(x1,y1)截取到终止坐标点(x2,y2)
代码说明:picture为要裁剪的图片
picture_1裁剪后的图片
x(1),y(1)裁剪起始坐标点
abs(x(1)-x(2)),abs(y(1)-y(2))裁剪长度读取图片
save_path='D:\picture\'; %图片地址文件夹 img_path_list = dir(strcat(save_path,'*.jpg')); %仅读取文件夹中的.jpg文件 img_num=length(img_path_list); %判断图片个数 for i = 1:img_num %采用循环方式读取文件 picture_name =img_path_list(i).name; picture = imread(strcat(save_path,picture_name)); %imshow(picture); end
获取截取点坐标
ginput函数
功能: 允许用户以交互方式使用鼠标选定要剪切的区域以此获取两个坐标点并以矩形方式裁剪
[x,y] = ginput(n) %n为你想选的点的个数,鼠标点的点的横坐标和纵坐标就会保存到[x,y]中。然后再输出x,y便可获取在图片上需要截取的点的坐标!
完整代码
代码片
.save_path='D:\picture\'; img_path_list = dir(strcat(save_path,'*.jpg')); img_num=length(img_path_list); %判断图片个数 for i = 1:img_num %因为拍照片的时候固定好了位置所以用一个for循环就可以截取出所有的图片的数字 picture_name =img_path_list(i).name; picture = imread(strcat(save_path,picture_name)); imshow(picture); [x,y]=ginput(2); %先用的ginput函数获取图片中数字的起始坐标 %x=[1.0e+03 *0.7145,1.0e+03 *1.0305]; %y=[234.5000,670.5000]; picture_1 =imcrop(picture,[x(1),y(1),abs(x(1)-x(2)),abs(y(1)-y(2))]); %切割图像,起始坐标点(x1,y1)截取到终止坐标点(x2,y2) imwrite(picture_1,[num2str(i),'.jpg']);%将图片保存在程序所在文件夹中 end
截取前
截取后 -
基于图像分割的区域提取
2018-10-19 13:38:44MATLAB实现的图像分割程序,通过读入一副图片,进行二值化和相应的分割算法之后,可以提取到相应的图像块,并且在不同的分割块上进行标注。代码中附带图片,可以直接运行。 -
3种matlab截取指定区域图片.zip
2019-05-19 10:31:24选择你感兴趣的区域,截取图片,然后下一步对你感兴趣的区域继续进行操作 -
matlab – 提取边界内的图像区域
2021-04-21 04:16:01我必须使用2D CT图像进行一个项目,并使用Matlab(仅)对肝脏和肿瘤进行分割.最初我必须单独分割肝脏区域.我使用区域生长进行肝脏分割.它获得种子点作为输入.输出是具有肝区边界的图像.现在我需要仅由边界包围的区域.我...我必须使用2D CT图像进行一个项目,并使用Matlab(仅)对肝脏和肿瘤进行分割.最初我必须单独分割肝脏区域.我使用区域生长进行肝脏分割.它获得种子点作为输入.
输出是具有肝区边界的图像.现在我需要仅由边界包围的区域.
我的程序有一个主程序和一个regionGrowing.m函数.因为我是新用户,所以不允许发布图片.如果你确实需要图像,我会给你发邮件.请帮助我.
% mainreg.m
IR=imread('nfliver5.jpg');
figure, imshow(IR), hold all
poly = regionGrowing(IR,[],15,1200); % click somewhere inside the liver
plot(poly(:,1), poly(:,2), 'LineWidth', 2, 'Color', [1 1 1])
%regionGrowing.m
function [P, J] = regionGrowing(cIM, initPos, thresVal, maxDist, tfMean, tfFillHoles, tfSimplify)
% REGIONGROWING Region growing algorithm for 2D/3D grayscale images
%
% Syntax:
% P = regionGrowing();
% P = regionGrowing(cIM);
% P = regionGrowing(cIM, initPos)
% P = regionGrowing(..., thresVal, maxDist, tfMean, tfFillHoles, tfSimpl)
% [P, J] = regionGrowing(...);
%
% Inputs:
% cIM: 2D/3D grayscale matrix {current image}
% initPos: Coordinates for initial seed position {ginput position}
% thresVal: Absolute threshold level to be included {5% of max-min}
% maxDist: Maximum distance to the initial position in [px] {Inf}
% tfMean: Updates the initial value to the region mean (slow) {false}
% tfFillHoles: Fills enclosed holes in the binary mask {true}
% tfSimplify: Reduces the number of vertices {true, if dpsimplify exists}
%
% Outputs:
% P: VxN array (with V number of vertices, N number of dimensions)
% P is the enclosing polygon for all associated pixel/voxel
% J: Binary mask (with the same size as the input image) indicating
% 1 (true) for associated pixel/voxel and 0 (false) for outside
%
% Examples:
% % 2D Example
% load example
% figure, imshow(cIM, [0 1500]), hold all
% poly = regionGrowing(cIM, [], 300); % click somewhere inside the lungs
% plot(poly(:,1), poly(:,2), 'LineWidth', 2)
%
% % 3D Example
% load mri
% poly = regionGrowing(squeeze(D), [66,55,13], 60, Inf, [], true, false);
% plot3(poly(:,1), poly(:,2), poly(:,3), 'x', 'LineWidth', 2)
%
% Requirements:
% TheMathWorks Image Processing Toolbox for bwboundaries() and axes2pix()
% Optional: Line Simplification by Wolfgang Schwanghart to reduce the
% number of polygon vertices (see the MATLAB FileExchange)
%
% Remarks:
% The queue is not preallocated and the region mean computation is slow.
% I haven't implemented a preallocation nor a queue counter yet for the
% sake of clarity, however this would be of course more efficient.
%
% Author:
% Daniel Kellner, 2011, braggpeaks{}googlemail.com
% History: v1.00: 2011/08/14
% error checking on input arguments
if nargin > 7
error('Wrong number of input arguments!')
end
if ~exist('cIM', 'var')
himage = findobj('Type', 'image');
if isempty(himage) || length(himage) > 1
error('Please define one of the current images!')
end
cIM = get(himage, 'CData');
end
if ~exist('initPos', 'var') || isempty(initPos)
himage = findobj('Type', 'image');
if isempty(himage)
himage = imshow(cIM, []);
end
% graphical user input for the initial position
p = ginput(1);
% get the pixel position concerning to the current axes coordinates
initPos(1) = round(axes2pix(size(cIM, 2), get(himage, 'XData'), p(2)));
initPos(2) = round(axes2pix(size(cIM, 1), get(himage, 'YData'), p(1)));
end
if ~exist('thresVal', 'var') || isempty(thresVal)
thresVal = double((max(cIM(:)) - min(cIM(:)))) * 0.05;
end
if ~exist('maxDist', 'var') || isempty(maxDist)
maxDist = Inf;
end
if ~exist('tfMean', 'var') || isempty(tfMean)
tfMean = false;
end
if ~exist('tfFillHoles', 'var')
tfFillHoles = true;
end
if isequal(ndims(cIM), 2)
initPos(3) = 1;
elseif isequal(ndims(cIM),1) || ndims(cIM) > 3
error('There are only 2D images and 3D image sets allowed!')
end
[nRow, nCol, nSli] = size(cIM);
if initPos(1) < 1 || initPos(2) < 1 ||...
initPos(1) > nRow || initPos(2) > nCol
error('Initial position out of bounds, please try again!')
end
if thresVal < 0 || maxDist < 0
error('Threshold and maximum distance values must be positive!')
end
if ~isempty(which('dpsimplify.m'))
if ~exist('tfSimplify', 'var')
tfSimplify = true;
end
simplifyTolerance = 1;
else
tfSimplify = false;
end
% initial pixel value
regVal = double(cIM(initPos(1), initPos(2), initPos(3)));
% text output with initial parameters
disp(['RegionGrowing Opening: Initial position (' num2str(initPos(1))...
'|' num2str(initPos(2)) '|' num2str(initPos(3)) ') with '...
num2str(regVal) ' as initial pixel value!'])
% preallocate array
J = false(nRow, nCol, nSli);
% add the initial pixel to the queue
queue = [initPos(1), initPos(2), initPos(3)];
%%% START OF REGION GROWING ALGORITHM
while size(queue, 1)
% the first queue position determines the new values
xv = queue(1,1);
yv = queue(1,2);
zv = queue(1,3);
% .. and delete the first queue position
queue(1,:) = [];
% check the neighbors for the current position
for i = -1:1
for j = -1:1
for k = -1:1
if xv+i > 0 && xv+i <= nRow &&... % within the x-bounds?
yv+j > 0 && yv+j <= nCol &&... % within the y-bounds?
zv+k > 0 && zv+k <= nSli &&... % within the z-bounds?
any([i, j, k]) &&... % i/j/k of (0/0/0) is redundant!
~J(xv+i, yv+j, zv+k) &&... % pixelposition already set?
sqrt( (xv+i-initPos(1))^2 +...
(yv+j-initPos(2))^2 +...
(zv+k-initPos(3))^2 ) < maxDist &&... % within distance?
cIM(xv+i, yv+j, zv+k) <= (regVal + thresVal) &&...% within range
cIM(xv+i, yv+j, zv+k) >= (regVal - thresVal) % of the threshold?
% current pixel is true, if all properties are fullfilled
J(xv+i, yv+j, zv+k) = true;
% add the current pixel to the computation queue (recursive)
queue(end+1,:) = [xv+i, yv+j, zv+k];
if tfMean
regVal = mean(mean(cIM(J > 0))); % --> slow!
end
end
end
end
end
end
%%% END OF REGION GROWING ALGORITHM
% loop through each slice, fill holes and extract the polygon vertices
P = [];
for cSli = 1:nSli
if ~any(J(:,:,cSli))
continue
end
% use bwboundaries() to extract the enclosing polygon
if tfFillHoles
% fill the holes inside the mask
J(:,:,cSli) = imfill(J(:,:,cSli), 'holes');
B = bwboundaries(J(:,:,cSli), 8, 'noholes');
else
B = bwboundaries(J(:,:,cSli));
end
newVertices = [B{1}(:,2), B{1}(:,1)];
% simplify the polygon via Line Simplification
if tfSimplify
newVertices = dpsimplify(newVertices, simplifyTolerance);
end
% number of new vertices to be added
nNew = size(newVertices, 1);
% append the new vertices to the existing polygon matrix
if isequal(nSli, 1) % 2D
P(end+1:end+nNew, :) = newVertices;
else % 3D
P(end+1:end+nNew, :) = [newVertices, repmat(cSli, nNew, 1)];
end
end
% text output with final number of vertices
disp(['RegionGrowing Ending: Found ' num2str(length(find(J)))...
' pixels within the threshold range (' num2str(size(P, 1))...
' polygon vertices)!'])
最佳答案 如果我理解正确,你有一个肾脏边界的二进制图像,现在需要将边界内部设置为1s.为此,您可以使用带有“孔”设置的
imfill()功能.
BW2 = imfill(BW,'holes');
编辑:看看代码,似乎它已经做了你想要的.
% Outputs:
% J: Binary mask (with the same size as the input image) indicating
% 1 (true) for associated pixel/voxel and 0 (false) for outside
所以你只需要得到第二个输出:
IR=imread('nfliver5.jpg');
figure, imshow(IR), hold all
[poly im] = regionGrowing(IR,[],15,1200); % click somewhere inside the liver
imshow(im,[])
现在,im是带有分段区域的二进制图像.
EDIT2:
一旦你有二进制图像im,你可以简单地使用逐元素乘法来删除分割区域外的orignal图像的所有部分.
SEG = IR.*im;
imshow(SEG,[])
EDIT3:
对于3D图像,您需要手动指定坐标,而不是使用鼠标.这是因为鼠标只给我们2个坐标(x和y),你需要3个(x,y和z).因此,只需查看图像,然后选择合适的z坐标即可找到所需的坐标.
%Example coordinates,
coordinates = [100 100 5]
poly = regionGrowing(squeeze(IR), coordinates, 60, Inf, [], true, false);
-
MATLAB中实现特定像素区域处理
2019-01-08 19:14:42下面来介绍一下如何在MATLAB中对图像的某些特定像素值进行处理,具体如下: ... %读取图像 g=[222 272 300 270 221 194]; %选取像素区间块 f=[21 21 75 121 121 75]; %选取像素区间块 j=roifill(B,g,f); ...下面来介绍一下如何在MATLAB中对图像的某些特定像素值进行处理,具体如下:
1、打开MATLAB,在其主界面的编辑器中写入下列代码:
B=imread('eight.tif'); %读取图像 g=[222 272 300 270 221 194]; %选取像素区间块 f=[21 21 75 121 121 75]; %选取像素区间块 j=roifill(B,g,f); %特定区域掩盖 figure,imshow(B); figure,imshow(j)
2、保存代码至自定义路径下,点击运行,结果如下:
如图所示,可以明显看出,处理后的图像中只显示了三枚硬币,这就是把之前第四枚硬币的像素值区域掩盖的结果,也可以根据用户自己的需求进行掩盖和虚化。
3、新建一个编辑文本,写入下列代码:
B=imread('eight.tif'); %加载图片 g=[222 272 300 270 221 194]; %像素区域选择1 f=[21 21 75 121 121 75]; %像素区域选择2 BW=roipoly(B,g,f); h=fspecial('unsharp'); j=roifilt2(h,B,BW); figure,imshow(B); figure,imshow(j)
4、保存该代码至自定义路径下,点击运行,结果如下:
如图所示,可以明显看出,上诉代码的结果就是对原图的第四个硬币进行图像增强,效果很好。
至此基本介绍完毕,请大家继续关注!!!
-
matlab 车牌区域提取
2013-09-22 19:41:43matlab 车牌区域提取 在2008上编的 自己注意一下程序中的图片路径就能用 -
MATLAB截取图像中的某个区域,同时保存对应的坐标值
2020-08-26 14:24:04pic = imread('1.jpg'); imshow(pic); [x,y] = ginput(2); %确定图像上的两点利用ginput函数,返回值是两点的坐标 ...%从该定点出发向右abs(x(1)-x(2)),向下abs(y(1)-y(2))的区域进行切割 figure,imshow(pic_1); -
图像中提取圆形子区域matlab code
2021-01-27 08:00:49就可以轻松提取到图像中100*300大小矩形区域的图像那么有时候需要提取图像中圆形区域的图像,其实应用圆的表达式就可以很容易求取下面是自己用matlab写的一个提取圆形区域图像的函数,可供大家参考:function IMG_... -
感兴趣区域提取(ROI)matlab实现
2012-05-30 20:15:22图片的感兴趣区域的提取matlab实现 直接运行go函数即可运行 可视化操作 -
matlab_提取目标区域形状特征
2010-04-14 16:53:22例子是用来提取叶片形状参数的,如果感兴趣可以拿去参考,修改。。。 -
matlab获取图像某点RGB值、灰度值的方法
2020-04-24 21:12:031. 先将那个图片显示出来 img_a = imread('test.tiff'); %写文件名字,文件放在matlab可检索的目录下 imshow(img_a); 2. 点击左上角的标识符号 ... -
MATLAB 图像处理之图片区域显示
2022-03-15 23:23:12MATLAB 图像处理 图片区域显示,左上角、右上角、左下角、右下角 -
图像边界提取与处理matlab的实现
2018-07-03 19:52:49matlab函数用于图像边缘的提取,包含的方法有说soble算子 -
使用MATLAB提取图片中特定颜色
2019-06-30 22:30:51在做毕设的过程中,用到了...(2)将图像转换为hsv之后,先创建一个白色图像,再根据需要,通过控制H通道来提取特定颜色的部分,并将提取出来的部分复制到刚刚创建的白色图像上; 下图是H通道控制不同颜色时的取值范... -
MATLAB-图片特定颜色区域提取(矩阵)
2018-02-07 20:23:54a=imread('48.png');%图片路径名称 a为m*n*3矩阵 m,n分别为宽高 3表示RGB分量 dd1=(a(:,:,1)=240&a(:,:,2)=205&a(:,:,3)=30); %由RGB颜色范围抠图 结果为逻辑矩阵(只包含0与1) [m,n]=size(dd1);... -
基于matlab得图像感兴趣区域提取
2019-07-23 22:46:58对于图像感兴趣区域(ROI)的提取,一般从来两个方面着手解决:一是利用图像分割技术提取ROI;二是从人眼得视觉特征出发,通过模拟人眼得视觉特点,寻找特定得视觉敏感区域,并将这些视觉敏感区域排序作为ROI。 本文... -
matlab的图像区域颜色替换填充办法
2022-03-25 16:23:54 不使用阈值分割,更改特定颜色区域的颜色,例如 -> 红色数据点替换成蓝色。 这件事在python中不是很好完成,但是在matlab中就非常方便,由于find函数的强大,可以20行代码解决问题。 解决办法: 由于... -
MATLAB图像分析
2021-03-03 17:09:07摘要MATLAB的影像处理工具箱支持多种标准的图像处理操作,以方便用户对图像进行分析和调整。这些图像处理操作主要包括: ①获取像素值及其统计数据; ②分析图像,抽取其主要结构信息; ③调整图像,突出其某些特征... -
MATLAB的图像提取形态学实战之对图片的腐蚀区域提取显示,对比输出展示出来
2021-03-24 20:04:15MATLAB的图像提取实战之对图片的腐蚀区域提取显示,对比输出展示出来 直接上代码: close all; clear all;clc; ii=imread('333333333.jpg'); subplot(241);imshow(ii);title('原始图像'); ii2=rgb2gray(ii); ... -
基于MATLAB的特定前景图像分离,将车辆识别并分离出来的第二种方法——通过图像的RGB线性变换的像素操作...
2020-03-01 20:58:53这个MATLAB函数将灰度图像I中的强度值映射到J中的新值,使得1%的数据在I的低强度和高强度下饱和。对图像f中任意像素的灰度值x进行变换,得到图像f 中对应像素的灰度值XF。 具体的算法步骤如下: i. Set adjustment... -
matlab提取图像特征值
2021-04-18 13:51:022.2.2读取图片并调用函数 i = imread('F:\\matlab\\1.jpg'); z=shibie(i); 2.2.3图片处理及图形识别与显示程序 ......用MATLAB求矩阵特征值_数学_自然科学_专业资料。. 用 matlab 求矩阵的特征值和特征向量 我要... -
在Matlab中从图像中提取对象
2021-04-18 06:33:31希望它能带给你创意……我所做的基本上是用中值滤波器过滤图像(就像你做的那样)并使用bwareaopen删除小元素.然后我打电话给regionprops来获得一堆属性,其中最重要的是区域和偏心.这个想法是所有字母“a”应该有一个... -
matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)
2019-03-18 22:20:17需求:提取出图像特定黄瓜部分并得到其rgb三原色; 步骤: 首先确定黄瓜大概范围,将其它设置为背景颜色,也就是饱和度为0; 得到此时直方图,因为黄瓜是绿色的(所以它的g的饱和度较高,背景色的饱和度较底),... -
matlab旋转图像具体代码-CSTMWS-Matlab-Interface:CSTMicrowaveStudio到MATLAB接口
2021-05-23 11:23:25matlab旋转图像具体代码介绍 此类TCSTInterface类允许使用Windows的COM技术从MATLAB内与CST Microwave Studio进行通信。 提交的主要目标是控制现有的CST项目,获取并对模拟结果进行后处理,导出几何图形并从项目中... -
如何用MATLAB实现感兴趣区域ROI的选取
2021-04-18 05:26:20描述感兴趣区域感兴趣区域(Regions of Interest,ROI)这一概念,是指图像中最能引起用户兴趣...图像感兴趣区域的提取具有以下特点:(1)感兴趣区域并没有十分严格的定义。对于同一幅图像而言,在不同的应用背景下,人... -
【Matlab 图像】读取视频并抽取特定帧保存图片
2020-11-27 11:53:35% 读取视频并抽取特定帧保存图片 videoName = 'video1.mp4'; video = VideoReader(videoName); nFrame = video.NumberOfFrame; % 获取视频总帧数 for frameNum=70:1:80 frame = read(video,frameNum); % 获取... -
颜色检测通过 HSV 颜色模型:检测图像中的特定颜色并输出为黑白图像-matlab开发
2021-05-30 13:50:54输入:RGB 格式的图像对象 输出:二进制图像对象(1 代表目标颜色,否则为 0)用于在输入图像对象中检测到的黑色、白色、红色、黄色、绿色、青色、蓝色和洋红色 演示: im = imread('a.jpg'); Im_ColorLayer = color... -
Matlab提取图像的RGB分量以及RGB的阈值分割
2019-05-09 13:50:06Matlab提取RGB颜色分量: 我们知道,一张RGB图像,对应着一个M xN x3 的三维图像。这里的3代表着R,G,B三个分量。其数据类型为uint8类型。数值大小在[0,255]之间。 例如:我们在Matlab中读入本次测试的图像。I=...