
defining a polygon area within an array
14 次查看(过去 30 天)
显示 更早的评论
I have a 2D array of numbers.
I have a polygon with defined x and y coordinates.
Could someone please help me set the area within the array that the polygon overlaps to 0 please.
0 个评论
回答(2 个)
Akira Agata
2020-3-26
How about the following solution?
% 100-by-100 sample matrix
Zin = peaks(100);
Zin = Zin - min(Zin(:));
% Example of polygon
pgon = polyshape([10 10 80 30], [10 30 30 10]);
% Create logical index which indicates inside/outsize the polygon
[colGrid,rowGrid] = meshgrid(1:size(Zin,2),1:size(Zin,1));
idx = isinterior(pgon,[colGrid(:),rowGrid(:)]);
idx = reshape(idx,size(Zin));
% Set elements inside the polygon to 0
Zout = Zin;
Zout(idx) = 0;
% Show the result
figure
subplot(2,2,1)
contourf(Zin)
title('Original','FontSize',14)
colorbar
subplot(2,2,2)
plot(pgon)
xlim([1 100])
ylim([1 100])
box on
title('Polygon','FontSize',14)
subplot(2,2,3)
contourf(Zout)
title('Result','FontSize',18)
colorbar

0 个评论
Walter Roberson
2020-3-26
If you have the Computer Vision Toolbox, then you can use https://www.mathworks.com/help/vision/ref/insertshape.html#btppvxj-1-shape insertShape with 'filledpolygon' and 'Color', 'k' . This will write 0s into the part of the rectangle indicated by the coordinates. The resulting array will have been converted to RGB, but you can just take the first pane of it.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!