How do i change resolution of images within the stack to make image foveated based on Euclidean distance from pixels within the image

7 次查看(过去 30 天)
i1 = imread("iron-man-marvel-chrome-theme-wallpaper.png");
i2 = imread("iron-man-marvel-chrome-theme-wallpaper2.png");
i3 = imread("iron-man-marvel-chrome-theme-wallpaper3.png");
i4 = imread("iron-man-marvel-chrome-theme-wallpaper4.png");
i5 = imread("iron-man-marvel-chrome-theme-wallpaper5.png");
%concatened array full of images
m = cat(4,i1,i2,i3,i4,i5);
%check each rgb invidually
red = m(:,:,1);
green = m(:,:,2);
blue = m(:,:,3);
%create/update rgb stacks, rgb stacks will be 5
red = m(:,:,1,:);
green = m(:,:,2,:);
blue = m(:,:,3,:);
r = squeeze(red);
g = squeeze(green);
b = squeeze(blue);
rgb = cat(3,r,g,b);
x1 = 306;
x2 = 174;
y1 = 404;
y2 = 179;
distance = sqrt((x2-x1).^2 + (y2-y1).^2);
red = m(:,:,1,1);
imshow(red)

回答(1 个)

Maneet Kaur Bagga
Maneet Kaur Bagga 2023-9-11
Hi SANJIT SINGH,
To change the resolution of images within a stack based on the Euclidean distance from the pixels, following steps are suggested:
  1. For each pixel in an image, calculate its Euclidean distance from the center of the image. The center can be determined by dividing the image's width and height by 2.
  2. Determine the desired resolution for the foveated image. For example, to have the center pixels have the highest resolution, while the resolution gradually decreases towards the image's edges.
  3. Adjust the resolution based on the calculated Euclidean distance, modify the resolution of each pixel accordingly. This can be achieved by scaling the pixel's size or applying interpolation techniques to change the pixel's value based on neighboring pixels.
Iterate the above steps for each image within the stack of images.
The code provided above seems to be loading a stack of images and extracting the red channel from each image. The steps for changing the resolution of images based on the Euclidean distance is suggested below:
% Load the stack of images
i1 = imread('iron-man-marvel-chrome-theme-wallpaper.png');
i2 = imread('iron-man-marvel-chrome-theme-wallpaper2.png');
i3 = imread('iron-man-marvel-chrome-theme-wallpaper3.png');
i4 = imread('iron-man-marvel-chrome-theme-wallpaper4.png');
i5 = imread('iron-man-marvel-chrome-theme-wallpaper5.png');
% Concatenate the images into an array
m = cat(4, i1, i2, i3, i4, i5);
% Define the center coordinates of the image
centerX = size(i1, 2) / 2;
centerY = size(i1, 1) / 2;
% Iterate through each image in the stack
for i = 1:size(m, 4)
% Calculate the Euclidean distance for each pixel
for x = 1:size(m, 2)
for y = 1:size(m, 1)
distance = sqrt((x - centerX)^2 + (y - centerY)^2);
% Adjust the resolution based on the distance
scaling_factor = 1 / (distance + 1); % Modify this scaling factor as desired
% Resize the pixel using the scaling factor
m(y, x, :, i) = imresize(m(y, x, :, i), scaling_factor);
end
end
end
% Display the modified red channel of the first image
red = m(:, :, 1, 1);
imshow(red);
For better understanding of the "imresize" function please refer to the MATLAB Documentation below:
imresize
To know more about Image Foveation please refer to the article below:
I hope this helps!
Thank You
Maneet Bagga

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by