Drawing rectangles using matrices.
Show older comments
Hi, I need to draw a figure as shown in the picture using 256x256 matrix. There should be two rectangles and the rest of the matrix values should be zero. Can you please help ?

5 Comments
Anvinder Singh
on 28 Feb 2016
Edited: Azzi Abdelmalek
on 28 Feb 2016
Azzi Abdelmalek
on 28 Feb 2016
your question is not clear, illustrate with a 4x4 matrix for example
Anvinder Singh
on 28 Feb 2016
sudharsan V
on 1 Aug 2018
how to draw a triangle instead of rectangle?
Image Analyst
on 1 Aug 2018
Use plot() with 3 x values and 3 y values.
Answers (4)
You can use MATLAB's array indexing quite effectively for this:
>> X = ones(256,256,3);
>> X(40:140,[40,140],:) = 0;
>> X([40,140],40:140,:) = 0;
and to view the rectangle:
>> image(X)
creates this:

8 Comments
Anvinder Singh
on 28 Feb 2016
Image Analyst
on 28 Feb 2016
Edited: Image Analyst
on 28 Feb 2016
The y axis is show normally for an image. The top row is y=1 and increases from there as it goes down. This is opposite from a graph where the origin is at the bottom left. But it matches your example of what you said you wanted. If you just want a graph, use the rectangle() function.
@Anvinder Singh: "What function is this" the first line of my answer tells you what this is: it is called array indexing. Follow that link to learn more, or start here:
Anvinder Singh
on 29 Feb 2016
Stephen23
on 29 Feb 2016
Yes, I used a 3d array because this represents a standard RGB image that can be displayed via image. You can find more info on multidimensional arrays here:
Anvinder Singh
on 29 Feb 2016
Guillaume
on 29 Feb 2016
My answer is the same as Stephen's but applied to a 2D matrix.
However, I think you should pause and learn the basics of matrix indexing. If you're not able to understand Stephen's or my code you won't go very far.
In matlab's documentation follow the getting started tutorial.
Anvinder Singh
on 29 Feb 2016
Guillaume
on 28 Feb 2016
Considering your rectangles are aligned with the side of the image, all you have to do is fill two rows and two columns with 1:
function img = drawrectangle(img, xbounds, ybounds)
img(ybounds, xbounds(1):xbounds(2)) = 1;
img(ybounds(1):ybounds(2), xbounds) = 1;
end
And in your case, you use it like this:
img = zeros(256);
img = drawrectangle(img, [40, 140], [60, 80]); %you didn't show the y coordinates for the 1st rectangle
img = drawrectangle(img, [120, 200], [120, 200]);
imshow(img);
Image Analyst
on 28 Feb 2016
If you want them on a graph, with the y increasing upwards, try this:
rectangle('Position', [40,40,100,100]);
hold on;
rectangle('Position', [120,120,80,80]);
axis([0,220, 0,220]);

Note, your rectangles will overlap/intersect given the coordinates you gave despite the fact that your picture incorrectly shows them not overlapping.
3 Comments
Anvinder Singh
on 28 Feb 2016
Image Analyst
on 28 Feb 2016
Then do it the way the other two people showed you. If you want to reverse the y axis direction, you can with something like this
set(gca, 'ydir', 'reverse'); % or 'normal'
Anvinder Singh
on 29 Feb 2016
Anvinder Singh
on 1 Mar 2016
0 votes
1 Comment
Image Analyst
on 1 Mar 2016
Explain why 120 comes after 140 in your diagram.
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!