Matlab image spatial resolution, change pixel

조회 수: 8 (최근 30일)
akevg akevg
akevg akevg 2022년 3월 19일
댓글: DGM 2022년 3월 20일
Hi, how can ı change 8 bit image's pixel numbers like these? Help please

채택된 답변

Image Analyst
Image Analyst 2022년 3월 19일
Try this. It will make sure the output image is exactly the same size as the input image.
inputImage = imread('peppers.png');
[inputRows, inputColumns, numColors] = size(inputImage)
inputRows = 384
inputColumns = 512
numColors = 3
for ii = 1:6
subplot(2,3,ii);
outputImage = imresize(inputImage,2^-(ii-1));
[rows, columns, numColors] = size(outputImage);
fprintf('After resizing once it is %d rows by %d columns\n', rows, columns);
% Resize output image again to match the input.
outputImage = imresize(outputImage, [inputRows, inputColumns], 'nearest');
% Update size.
[rows, columns, numColors] = size(outputImage);
fprintf(' After resizing twice it is again %d rows by %d columns\n', rows, columns);
imshow(outputImage);
% Show title with new size.
caption = sprintf('%d rows by %d columns', rows, columns);
axis('on', 'image')
title(caption)
end
After resizing once it is 384 rows by 512 columns
After resizing twice it is again 384 rows by 512 columns
After resizing once it is 192 rows by 256 columns
After resizing twice it is again 384 rows by 512 columns
After resizing once it is 96 rows by 128 columns
After resizing twice it is again 384 rows by 512 columns
After resizing once it is 48 rows by 64 columns
After resizing twice it is again 384 rows by 512 columns
After resizing once it is 24 rows by 32 columns
After resizing twice it is again 384 rows by 512 columns
After resizing once it is 12 rows by 16 columns
After resizing twice it is again 384 rows by 512 columns

추가 답변 (2개)

Voss
Voss 2022년 3월 19일
You can try imresize()
im = imread('image_1.png');
for ii = 1:6
subplot(2,3,ii);
imshow(imresize(im,2^-(ii-1)));
end
  댓글 수: 9
akevg akevg
akevg akevg 2022년 3월 19일
@Image Analyst ı fixed thanks
DGM
DGM 2022년 3월 20일
Or you could just do
inpict = imread('peppers.png');
k = 16;
outpict = imresize(imresize(inpict,1/k,'bilinear'),k,'nearest');
imshow(outpict)
[size(inpict); size(outpict)]
ans = 2×3
384 512 3 384 512 3
Which is far simpler and much faster than using blockproc() for any moderately large image.
Of course, it depends how much control one wants over exactly which pixels are contributing to each block and how exactly they're being weighted. I'm assuming that the goal here has no technical requirements, as none were given.

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2022년 3월 19일
Use blockproc(). Solution attached.

카테고리

Help CenterFile Exchange에서 Convert Image Type에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by