我完成了以下代码,我从胶片导入一个帧,转换为灰度,并通过徒手绘制感兴趣的区域。然后我使用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
答案 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
在编写结果时,您可能需要将其放入某种类型的结构中,这样您就可以遍历,除非您将结果写入每个循环中的文件。