MATLAB中的感兴趣区域提取

时间:2018-03-07 14:00:43

标签: matlab image-processing foreground roi

我正在编写一个MATLAB代码,用于在由静脉组成的前臂图像的选定(来自自动ROI)灰度区域上实现特定滤波器。我还上传了一个主题的前臂(在前景已经提取之后)。

基本上,我有不同方位的不同科目的前臂的近红外摄像机图像。我编写的代码提取了手臂的前景灰度图像,这给了我前臂的白色背景。我使用Sobel边缘找到边缘。我还使用find函数找到了非零索引。我得到了行和col索引。我需要一个关于如何提取前臂两侧检测到的边缘(近10个像素)的图像(黑白边缘图像 - 也上传)。

索贝尔边缘:

sobel-edge

前景图片

Foreground image

我需要提取的投资回报率图片:

roi image that I need to extract

clear all
close all
clc

image= rgb2gray(imread('Subj1.jpg'));
image1=~im2bw(image,0.1);
image1=im2uint8(image1);
foreground=imadd(image1,image);
imshow(foreground);
edgesmooth=medfilt2(foreground);
sobeledge= edge(edgesmooth,'sobel');
sobeledge=im2uint8(sobeledge);
figure 

imshow(sobeledge);
[col,row]=find(sobeledge~=0);

1 个答案:

答案 0 :(得分:0)

从您在此处制作的蒙版图片开始:

image1=~im2bw(image,0.1);

但反转,使得背景的掩码为零,前景为非零:

image1 = im2bw(image,0.1);

您可以使用imdilate将其展开固定距离:

se = strel('disk',20); % This will extend by 20/2=10 pixels
image2 = imdilate(image1,se);

image2将与image1类似,但在所有方向上展开10个像素。

imerode恰恰相反,它缩小了区域。