How to center and add margin around image?
17 次查看(过去 30 天)
显示 更早的评论
Here is my code, what im trying to do is to put image I2 on top of image I1 center it and create a white margin around it that is 50 pixels. Ive googled some possible solutions for the margin and im not having any luck in implementing those solutions. Any help?
I1 = imread('blue-lake.jpg');
I2 = imread('portrait.jpg');
I1 = imresize(I1, 1);
IM2 = imresize(I2, 2);
I1 = image(I1)
hold on;
image(IM2);
0 个评论
回答(4 个)
KALYAN ACHARJYA
2021-2-28
编辑:KALYAN ACHARJYA
2021-2-28
You can manually adjust the indices and overlap with the main image. Note that the main image pixel values will be lost in the overlap portion. Considering main image is larget than marker image.
main_image=imread('......');
marker=imread('.......');
[r,c]=size(main_image);
[r1,c1,ch]=size(marker);
%Make the white border at the boundary
pix_add=50; % In each boundary, 100 for Both sides
im_data=uint8(255*ones(r1+2*pix_add,c1+2*pix_add,3));
im_data(pix_add+1:r1+pix_add,pix_add+1:c1+pix_add,:)=marker;
% White Border in the marker is done
imshow(im_data);
Next: Find the coordinates where you want to place the marker in the main image. You can find data of approximately middle rows and columns from R and C. Once you get the coordinates, the next task is to put im_data in the main_image as I did in the marker (last line of code)
Note: A fairly simple problem, first use pen and paper to decide the coordinates.
Hope you can do the next step. :)
0 个评论
Image Analyst
2021-2-28
Have you tried padarray()? Then use indexing to paste it onto the other image. I'm attaching a copying and pasting demo. Check out the pasting part, or Kalyan's code to see how to paste your padded array onto the image.
0 个评论
alexander Mcghee
2023-4-27
编辑:alexander Mcghee
2023-4-27
% Read the input images
I1 = imread('path/to/your/image1.jpg');
I2 = imread('path/to/your/image2.jpg');
% rescale the second image height and width by 1/2
I2 = imresize(I2, 0.5);
% Set the margin size
margin_size = 50;
% Get the size of the input images
[h1, w1, c1] = size(I1);
[h2, w2, c2] = size(I2);
% Create a white margin around Image I2
I2_margin = padarray(I2, [margin_size margin_size], 255, 'both');
% Get the size of the image with margin
[h2_margin, w2_margin, ~] = size(I2_margin);
% Initialize a new image with the same size as Image I1
merged_image = I1;
% Calculate the position to center Image I2 with margin on Image I1
top_left_row = floor((h1 - h2_margin) / 2) + 1;
top_left_col = floor((w1 - w2_margin) / 2) + 1;
% Place the Image I2 with margin on top of Image I1
merged_image(top_left_row:top_left_row+h2_margin-1, top_left_col:top_left_col+w2_margin-1, :) = I2_margin;
% Display the merged image
imshow(merged_image);
0 个评论
DGM
2023-4-27
FWIW, this is how I'd do it with MIMT.
% contrive two images of different scale, class, size, and depth
BG = imread('peppers.png'); % RGB, uint8 (0 to 255)
FG = im2int16(imread('cameraman.tif')); % I, int16 (-32768 to 32767)
% add matting to FG image
fgmatcolor = [0.2 0.1 1 0.5]; % pick any tuple (I/IA/RGB/RGBA)
fgmatwidth = [20 40]; % widths can be 1,2,or 4 terms
FG = addborder(FG,fgmatwidth,fgmatcolor,'normalized');
% assemble the output image
outpict = imstacker({FG,BG}); % stack
outpict = mergedown(outpict,1,'normal'); % composite
outpict = splitalpha(outpict); % discard unneeded alpha channel
imshow(outpict)
It's more expensive than a minimal approach, but it's simple to use and generalized. Note that I never once had to consider the fact that the images are incompatible class, scale, or size. That makes it ideal for one-off ad-hoc usage like this.
See also:
Other ways to add black/colored/patterned borders on images
Adding a graduated border on an image
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Lighting, Transparency, and Shading 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!