Resizing pixels with independent scaling factor?

2 次查看(过去 30 天)
How can be pixels resized with independent scaling factor?
Keeping size of final image same as initial image.
e.g.
+ =
Resizing method 'nearest' would be enough.
Right I am using some kind of 'for' loop but want to avoid it for faster processing.
Starting experiment data could be:
%% Creation of starting image
w=8;
im=255*ones(w,w,1, 'uint8');
im(2,2,:)=0;
im(6,6,:)=0;
%% Inputs to resize pixels
row=[2;6]; col=[2;6];
scale=[3;5]; % length of each of these inputs are same, explanation: pixel{2,2} will have a scaling factor 3 and so on..
% fractional scaling factor can be entertained as per nearest resizing method.
% length of these inputs are large, of the order of number of pixels in the image, thats why for loop takes time.
Any innovative ideas are welcome
Note: During resizing process sometimes pixels may overlap, in this case, new values will overwrite the old values
i.e., pixels processed due to bottom values of [row, col & scale] can overwrite the previous values.
Thanks
  3 个评论
JAI PRAKASH
JAI PRAKASH 2019-2-15
Thanks for consideration @kalyan.
Initial image (SIze is [8x8])
im_ask2.JPG
Final image (SIze is [8x8])
imResized_ask2.JPG
Jan
Jan 2019-2-15
@JAI: Please post the current working code, if you want us to improve it. Maybe the loop is the most efficient method, when it is optimized.

请先登录,再进行评论。

采纳的回答

Jan
Jan 2019-2-15
编辑:Jan 2019-2-15
Let's start with a working loop:
w = 8;
im = repmat(uint8(255), w, w);
im(2,2,:) = 0;
im(6,6,:) = 0;
row = [2;6];
col = [2;6];
scale = [3;5];
for k = 1:numel(row)
s = (scale(k) - 1) / 2;
w(row(k) - s:row(k) + s, col(k) - s:col(k) + s) = ...
w(row(k), col(k));
end
Is this your current code?
Maybe this is slightly faster or nicer:
s = (scale - 1) / 2;
iRow = row - s; % Safer: max(1, row - s);
fRow = row + s; % min(w, row + s);
iCol = col - s; % max(1, col - s);
fCol = col + s; % min(w, col + 2);
for k = 1:numel(row)
w(iRow(k):fRow(k), iCol(k):fCol(k)) = w(row(k), col(k));
end
The assignment inside the loop is vectorized already. If an overlap is possible, a fully vectorized method is hard or impossible. I assume, that the creation of the large index array will take more time than this compact loop.
  6 个评论
Jan
Jan 2019-2-18
A parallelization is strange here: The code overwrites elements of the input data and the order of loops matters. Then a parallel version cannot create the same output.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

标签

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by