创建一个循环以创建徒手的ROI

时间:2016-04-22 13:53:36

标签: matlab loops binary mask

我完成了以下代码,我从胶片导入一个帧,转换为灰度,并通过徒手绘制感兴趣的区域。然后我使用Chan-Vese区域填充来获得我感兴趣的区域并基于此创建一个掩码。我终于可以得到我正在寻找的二进制图像,在代码中称为BW3。现在这是愚蠢的部分。如何创建一个循环,使代码运行(加载帧1到58),向我提供第1帧的灰度图像,允许我绘制感兴趣的区域,然后创建并保存最终的二进制图像BW3? 问候, Ĵ

    % Select Initial Image
for n = 5:87
frame = read(obj,n);


%Isolate the Blade
imggray = rgb2gray(frame);
h_im=imshow(imggray);

%Region of interest
% r = imrect(gca,[646,188,18,-648]);
% BW2 = createMask(r,h_im);

hROI = imfreehand(gca);
Position = getPosition(hROI);
BW2 = createMask(hROI);

%Get blade Binary

BW3 = activecontour(imggray, BW2, 1000, 'Chan-Vese');

% Fill Holes
BW3 = imfill(BW3, 'holes');

% Form masked image from input image and segmented image.
maskedImage = h_im;
maskedImage(~BW3) = 0;

%Save binary frame
filename = sprintf('C:..........\\binaryimage%d.png', n);
imwrite(BW3,filename,'png');
end

1 个答案:

答案 0 :(得分:0)

假设您拥有有限数量的帧(即最多58个),您可以使用for循环来完成此任务。在您的代码中,您将不得不更改初始图像代码,以便它与循环迭代。

for counter=1:58
    frame=read(obj,counter); 
    imwrite(frame,strcat('frame',num2str(counter),'.png'))
    .....% the remainder of your code likely remains unchanged.
end

在编写结果时,您可能需要将其放入某种类型的结构中,这样您就可以遍历,除非您将结果写入每个循环中的文件。