我的图像有3个类,标记为{2,3,4},作为第一行的左图。
对于每个类,我想绘制一个轮廓,该轮廓是该类的外轮廓,作为第二行中的图像。我尝试使用下面的Matlab代码,但它显示了重叠轮廓。我怎样才能达到预期的效果? 谢谢大家
Img=ones(128,128);
Img(20:end-20,20:end-20)=2;
Img(30:end-30,30:end-30)=3;
Img(45:end-45,45:end-45)=4;
Img(50:end-65,68:end-48)=2; %% Add one more rectangular
Img(68:end-48,50:end-65)=3; %% Add one more rectangular
subplot(121);imagesc(Img);colormap(gray);hold on; axis off;axis equal;
subplot(122);imagesc(Img);colormap(gray);hold on; axis off;axis equal;
[c2,h2] = contour(Img==2,[0 1],'r','LineWidth',2);
[c3,h3] = contour(Img==3,[0 1],'g','LineWidth',2);
[c4,h4] = contour(Img==4,[0 1],'b','LineWidth',2);
hold off;
答案 0 :(得分:0)
要获得预期结果,您必须使用bwlabel标记已连接的组件。然后,对于每个组件,我们将使用imfill到组件中的fill个洞来绘制单个轮廓。这种方式将保证您将为每个组件绘制外轮廓。用于绘制类的所有可能组件。这是代码
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('location2')
bucket_files = [x.key for x in bucket.objects.all()]
输出:
答案 1 :(得分:-2)
我认为您可以更改边界的颜色,而不是使用contour
。
figure
Img=ones(128,128);
%the boundaries of two boxes
Img(20:end-20, 20)=2;
Img(20:end-20, end-20)=2;
Img(20, 20:end-20)=2;
Img(end-20, 20:end-20)=2;
Img(30:end-30, 30)=3;
Img(30:end-30, end-30)=3;
Img(30, 30:end-30)=3;
Img(end-30, 30:end-30)=3;
imagesc(Img);
cm = colormap(gray);
%modify the colormap for the different boundaries
colordata = cm;
colordata(findnearest([1:length(colordata)]/length(colordata), 2/max(max(Img))),:) = [1 0 0];
cm = colormap(colordata);
colordata = cm;
colordata(findnearest([1:length(colordata)]/length(colordata), 3/max(max(Img))),:) = [0 1 0];
colormap(colordata)
如果您理解为什么红色不在颜色条中的2处,那么您就完成了。我无法弄明白。希望这有所帮助..
N.B。我使用findneareest
来查找我想要修改的colomap条目。