如何翻译和缩放图像?

Posted

技术标签:

【中文标题】如何翻译和缩放图像?【英文标题】:how to translate and scale the image? 【发布时间】:2015-08-16 20:34:42 【问题描述】:

我的图片是这样的:

给定的imrgb = 320*512*3 double; color_map = 64*3 双倍;使用后

[X, map] = rgb2ind(imrgb, color_map);

我得到 X = 320*512 uint8。图像太大,无法进一步处理。我的 问题是如何在不丢失重要信息的情况下将图像转换和缩放到标准尺寸 32*32 像素(我的意思是图像的非黑色部分都是重要信息)?

【问题讨论】:

嗯?要将整个图像的大小调整为 32 x 32,还是要将图像中的每个补丁大小调整为 32 x 32?缩小到更小的尺寸总是会丢失信息。 @rayryeng,我想用这张图片做分类。我不知道哪个选择更好?你能单独告诉我 1) 将整个图像缩小到 32*32; 2) 将图像内的每个补丁大小调整为 32*32?还有一个问题,你能告诉我如何以及是否可以通过仅丢失图像黑色部分的信息并保存图像中40个补丁的信息来将图像调整为32 * 32? 调整大小总是会丢失信息,因为您实际上是在丢弃像素来计算调整大小的结果。我不太明白你所说的在不可能的情况下“保存”信息是什么意思。 @rayryeng ,我想单独知道如何 1)将整个图像缩小到 32*32;和 2) 将图像内的每个补丁的大小调整为 32*32?请教我! 我不建议您选择第一个选项。如果将整个图像的大小调整为 32 x 32,则 40 个大脑图像将是每个大脑几个像素大。如果你想做第二种选择,那似乎更合理。你能告诉我大脑图像中的每个块是否大小相同吗?也就是说,大图像中的所有大脑图像是否都具有相同的大小?此外,当您调整图像大小时,根据您使用的插值方案,您可能会引入不属于原始颜色映射的新颜色。这是你能忍受的吗?小评:320 x 512 一点也不大。 【参考方案1】:

这是一种解决方案,我将每个大脑平铺为32x32 图像。 cmets 解释代码。但基本思想是……

使用块进程

    将大图分割成一个 5x8 的网格,因为它有 5 行大脑和 8 列大脑。我将这些图像中的每一个都称为图块

    将每个图块的大小调整为 32x32

使用 mat2cell

    将新的小图块分割成单独的图像并显示它们

这里是代码

im = rgb2gray(imrgb);

max_rows = 32;
max_cols = 32;

%I assume every picture has 40 brains, 5 rows and 8 columns
rows_brains = 5;
cols_brains = 8;
[m n] = size(im);

%define the resize function to take the 'block_struct' image and resize
%it to max_rows x max_cols
fun = @(block_struct) imresize(block_struct.data,[max_rows max_cols]);

%blockproc will split the image into tiles. Each tile should hold one brain
%image. Then we resize that tile to a 32x32 tile using the resize function
%we defined earlier
I2 = blockproc(im,[m/rows_brains n/cols_brains],fun);

%split the image with small tiles into individual pictures
%each cell of indiv_brains will contain a 32x32 image of only one brain
indiv_brains = mat2cell(I2,max_rows*ones(1,rows_brains),max_cols*ones(1,cols_brains));

%displays all the brains
figure(1);

for ii=1:1:rows_brains
    for jj=1:1:cols_brains
        subplot(rows_brains, cols_brains, (ii-1)*cols_brains + jj);
        imshow(indiv_brainsii,jj);
    end
end

结果,这些单独的图像中的每一个都是 32x32

【讨论】:

我运行你的代码。有错误,你的代码中的“im”是什么? im = rgb2gray(imrgb); 感谢 rayryeng 我编辑了代码。对不起,我把它漏掉了@Angelababy

以上是关于如何翻译和缩放图像?的主要内容,如果未能解决你的问题,请参考以下文章

使用旋转/缩放/翻译在 Google 地图上定位图像

动画(缩放和翻译)android画布视图上的图像的一部分

相对 Xcode Storyboard 约束

IE11 翻译比例模糊图像

如何移动和缩放图像[关闭]

按下缩放按钮时如何缩放 ScrollView 图像?