求高手用MATLAB对图片进行缩放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求高手用MATLAB对图片进行缩放相关的知识,希望对你有一定的参考价值。

任务:对图片进行缩放

要求:1. 缩放比例可以任意取(如2,1.3等)。

2. 不可直接使用matlab的图像处理函数,除imread, imshow

3. 提示: floor,ceil, round, size…等。

4.非整数位置运用插值法。

求大神解答,谢谢!!!

imo=imread('test.png');%读取
s=2;%缩放倍数,缩放后与原始大小的比值
figure(1)
imshow(imo);%原图显示
[m n d]=size(imo);
if s<=1 & s>0
for i=1:d
im(:,:,i)=imo(round(1:1/s:m),round(1:1/s:n),i);
end
elseif s>1
[X Y]=meshgrid(1:n,1:m);
[Xt Yt]=meshgrid(1:1/s:n,1:1/s:m);
for i=1:d
im(:,:,i)=interp2(double(imo(:,:,i)),Xt,Yt,'spline');
end
if isa(imo,'uint8')
im=uint8(im);
else
im=uint16(im);
end
end
figure(2)
imshow(im);%缩放图显示
参考技术A 使用imresize函数可以实现图片的缩放。追问

imresize应该是matlab的图像处理函数,但是要求是不能用的。。

追答

那就参考该函数的源码咯

matlab矩阵缩小和放大

Matlab里的imresize函数可以对图像放大和缩小,但这同时也会改变图像矩阵的大小,如果想要上图所示的结果,需要再进行一些处理,处理代码如下所示。

clc
close all;

% 从当前目录下打开一张图片
[filename, filepath] = uigetfile('*.jpg;*.ppm; jpeg *.;*.bmp;*.png','Choose Input Image');
if isequal(filename,0) || isequal(filepath,0)
disp('User pressed cancel')
return
else
fullfp = fullfile(filepath, filename);
end
image = imread(fullfp); %代表要处理的图像
mysize = size(image);
%把图像转换成灰度图
if numel(mysize) > 2
image = rgb2gray(image);
end
r_e = mysize(1);
c_e = mysize(2);
subplot(2,3,1); imshow(image,[]); title('Input Image');

temp1 = imresize(image,2); %表示把图像放大到原来的两倍,但同时图像矩阵也是变成了原来的两倍
[r_t1,c_t1] = size(temp1);
s = temp1(round(r_t1/2)-floor(r_e/2) : round(r_t1/2)+ceil(r_e/2)-1, round(c_t1/2)-floor(c_e/2) : round(c_t1/2)+ceil(c_e/2)-1);
subplot(2,3,2); imshow(s,[]); title('Magnification');

temp2 = imresize(image,0.5); %表示把图像缩小到原来的一半,但同时图像矩阵也变成了原来的一半
[r_t2,c_t2] = size(temp2);
temp3 = zeros(r_e,c_e);
temp3(round(r_e/2)-floor(r_t2/2) : round(r_e/2)+ceil(r_t2/2)-1, round(c_e/2)-floor(c_t2/2) : round(c_e/2)+ceil(c_t2/2)-1) = temp2;
ss = temp3;
subplot(2,3,3); imshow(ss,[]); title('Minification');
登录后复制

ps:直接调用imresize函数而不进行处理的效果如下图所示:

看起来图像没怎么变化,但存储图像的矩阵已经变大或变小了,如下图所示:

image为原始图像矩阵,temp1为放大后的图像矩阵,temp2为缩小后的图像矩阵
参考技术A 在MATLAB中,可以使用imresize();函数来实现矩阵缩小和放大。该函数可以实现改变图像大小、比例和像素数量的功能。

以上是关于求高手用MATLAB对图片进行缩放的主要内容,如果未能解决你的问题,请参考以下文章

如何用MATLAB对图片进行缩放?

求高手给一个matlab提取图像lbp的代码 谢谢啦

MATLAB 图像处理

Java 中,对Oracle Clob中的图片Base64进行解码后用System.out.println() 输出为啥成乱码,求高手帮忙。

如何在HTML中用CSS对图片进行缩放

关于picture manager缩放图片