256 * 256图像划分为4 * 4块

34视图(30天)
库什
库什 2012年3月22日
我工作在一个图像处理的项目(水印)&需要256 * 256图像划分为4 * 4矩阵(重叠)得到4096块。如果有人知道请帮助我。
5个评论
沃尔特·罗伯森
沃尔特·罗伯森 2016年10月26日
很有趣,我没有遇到(或忘记了)im2col ()。我看到它输出一个数字矩阵,但不是一个单元阵列。

登录置评。

回答(5)

图像分析
图像分析 2013年4月15日
这是我的标准“把图像分成块”演示。它两种方式(你可以选择你喜欢的方式),和两种类型的图像(灰度和颜色)。很一般,所以可能会缩短一些,如果你有一定的条件,就像你知道的数量是一个整数块图像(即。,没有局部块的边缘)。
%演示,把一幅图像分成块(重叠块)。
%第一把一幅图像分成块的方法是通过使用mat2cell ()。
在这个演示%,我证明了彩色图像。
%把图像分成块的另一种方法是使用索引。
%在这个演示,我和一个灰度图像证明方法。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
工作空间;%确定工作区面板显示。
字形大小= 20;
%读入一个标准的MATLAB演示图像颜色。
文件夹= fullfile (matlabroot,“\工具箱\ \ imdemos图像”);
baseFileName =“peppers.png”;
%得到完整的文件名,路径前缀。
fullFileName = fullfile(文件夹,baseFileName);
如果~存在(fullFileName“文件”)
%没有找到它。检查它的搜索路径。
fullFileName = baseFileName;%没有路径。
如果~存在(fullFileName“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (错误:%年代并不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
%从磁盘读取的图像。
rgbImage = imread (fullFileName);
%测试代码,如果你想尝试一个灰度图像。
%下取消注释行,如果你想看看它是如何工作的灰度图像。
% rgbImage = rgb2gray (rgbImage);
%显示全屏图像。
imshow (rgbImage);
%全屏放大图。
集(gcf,“单位”,“归一化”,“outerposition”,(0 0 1 1));
drawnow;
%得到图像的尺寸。numberOfColorBands应该= 3。
[行列numberOfColorBands] =大小(rgbImage)
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%第一把一幅图像分成块的方法是通过使用mat2cell ()。
blockSizeR = 150;%行块。
blockSizeC = 100;%列块。
%计算出每个块的大小行。
%将blockSizeR但是可能会有余数的不足。
wholeBlockRows =地板(行/ blockSizeR);
blockVectorR = [blockSizeR * (1, wholeBlockRows),快速眼动(行,blockSizeR)];
%计算出每个块的大小在列。
wholeBlockCols =地板(列/ blockSizeC);
blockVectorC = [blockSizeC * (1, wholeBlockCols),快速眼动(列,blockSizeC)];
%创建单元阵列,ca。
%每个单元(除了最后剩下的细胞图像的)
%数组中包含一个blockSizeR blockSizeC 3颜色数组。
%这条线就是图像实际上是分割成块。
如果numberOfColorBands > 1
%的彩色图像。
ca = mat2cell (rgbImage blockVectorR、blockVectorC numberOfColorBands);
其他的
ca = mat2cell (rgbImage blockVectorR blockVectorC);
结束
%显示所有的块。
plotIndex = 1;
numPlotsR =大小(ca, 1);
numPlotsC =大小(ca, 2);
r = 1: numPlotsR
c = 1: numPlotsC
流(' plotindex = % d c = % d, r = % d \ n 'plotIndex c r);
%为显示图像的指定位置。
次要情节(numPlotsR numPlotsC plotIndex);
%提取数值数组的单元
%用于教程。
rgbBlock = ca {r、c};
imshow (rgbBlock);%可以叫imshow (ca {r、c})如果你想。
[rowsB columnsB numberOfColorBandsB] =大小(rgbBlock);
%使标题块编号。
标题= sprintf (“块# % d % d \ n % d % d列的行,
plotIndex, numPlotsR * numPlotsC、rowsB columnsB);
标题(标题);
drawnow;
%增加次要情节到下一个位置。
plotIndex = plotIndex + 1;
结束
结束
%在左上角显示原始图像。
次要情节(4,6,1);
imshow (rgbImage);
标题(原始图像的);
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%把图像分成块的另一种方法是使用索引。
%读入一个标准的MATLAB灰度图像演示。
文件夹= fullfile (matlabroot,“\工具箱\ \ imdemos图像”);
baseFileName =“cameraman.tif”;
fullFileName = fullfile(文件夹,baseFileName);
%得到完整的文件名,路径前缀。
fullFileName = fullfile(文件夹,baseFileName);
如果~存在(fullFileName“文件”)
%没有找到它。检查它的搜索路径。
fullFileName = baseFileName;%没有路径。
如果~存在(fullFileName“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (错误:%年代并不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
grayImage = imread (fullFileName);
%得到图像的尺寸。numberOfColorBands应该= 1。
[行列numberOfColorBands] =大小(grayImage);
%显示原始灰度图像。
图;
次要情节(2 2 1);
imshow (grayImage []);
标题(的原始灰度图像,“字形大小”、字形大小);
%全屏放大图。
集(gcf,“单位”,“归一化”,“outerposition”,(0 0 1 1));
%把图像分成4块。
%假设我们知道块大小,所有的块大小相同。
blockSizeR = 128;%行块。
blockSizeC = 128;%列块。
%计算出每个块的大小。
wholeBlockRows =地板(行/ blockSizeR);
wholeBlockCols =地板(列/ blockSizeC);
% Preallocate 3 d图像
image3d = 0 (wholeBlockRows wholeBlockCols 3);
%现在扫描,每一块,并把它作为一个3 d的一片数组。
sliceNumber = 1;
行= 1:blockSizeR:行
坳= 1:blockSizeC:列
%让我们有点显在变量
%,让它更容易看到发生了什么。
第一行=行;
row2 =第一行+ blockSizeR - 1;
col1 =上校;
col2 = col1 + blockSizeC - 1;
%的块提取到一个单独的子图象。
oneBlock = grayImage(第一行:row2 col1: col2);
%为显示图像的指定位置。
次要情节(2,2,sliceNumber);
imshow (oneBlock);
%使标题块编号。
标题= sprintf (“4块# % d”,sliceNumber);
标题(标题,“字形大小”、字形大小);
drawnow;
%分配我们只是这片图像中提取。
image3D (:,:, sliceNumber) = oneBlock;
sliceNumber = sliceNumber + 1;
结束
结束
%现在image3D是一个三维图像,每一片,
%或飞机,是一个象限的2 d图像。
对话框(“完成了演示!看看这两个数字。);
14日的评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年9月8日
horizontal_top = YourImage(1:地板(结束/ 2):);
horizontal_bottom = YourImage(地板(结束/ 2)+ 1:,:);
分裂左翼和右翼的代码是相似的。
沿着对角线分割的代码或圆或n-gons更为困难。

登录置评。


Ashwin
Ashwin 2016年9月20日
编辑:沃尔特·罗伯森 2016年9月20日
简单,使用这个函数
函数dividedImage = divideIntoBlocks (InputImage BlockSize)
img1 = InputImage;
TOTAL_BLOCKS =大小(img1 1) *大小(img1, 2) / (BlockSize * BlockSize);
dividedImage = 0 ([BlockSize BlockSize TOTAL_BLOCKS]);
行= 1;
坳= 1;
试一试
数= 1:TOTAL_BLOCKS
dividedImage(:,:,数)= img1(行:行+ BlockSize-1坳:坳+ BlockSize-1);
坳= + BlockSize上校;
如果(> =上校大小(img1 2))
坳= 1;
行=行+ BlockSize;
如果(行> =大小(img1 1))
行= 1;
结束
结束
结束
结束
2的评论
苏sankhwar
苏sankhwar 2017年2月23日
如何使用这个函数重叠块50%。请答

登录置评。


托马斯。
托马斯。 2012年3月22日
试试这个例子:
一个=兰德(16日16);% 16 * 16的矩阵
[b] =大小(一个);% = 16 * 16的大小
c = 4; d = 4;%重塑成4 * 4矩阵
l = 0;
我= 1:c: a - 3
j = 1: d:酮
C =((我+ 3)(j: + 3));
eval ([“out_”num2str(左)' = C '])
l = l + 1;
结束
结束
你应该得到16个4 * 4矩阵与out_15 out_0名字
11日评论
图像分析
图像分析 2021年2月3日
不确定(“获取”)意味着什么,但你知道imresize () ?

登录置评。


阿雅elfatyany
阿雅elfatyany 2015年2月11日
我工作在项目安全主要是秘密共享和我做了一个排列顺序排列后的秘密图像的像素。我想带像素排列图像的形成部分所以我怎么能形成一个部分?
1评论
图像分析
图像分析 2015年2月11日
我不知道这是什么意思。一个部分是什么?不论真假,我附加了一个非常简单的图像加扰脚本。

登录置评。


W.Khan
W.Khan 2017年10月14日
编辑:图像分析 2017年10月14日
你好,我把我的形象分成多个块,但我想这些新街区保存到一个文件夹。但是我不能保存它到另一个文件夹。
i = 1:10
一个= rgbBlock;
imwrite (sprintf (“% d.jpg”,我));
结束
所有的新街区都是相同的。我的意思是,新块代替了旧的图像块。你能帮怎么做吗?同时,如何为多个图像。请评论
14日的评论
图像分析
图像分析 2019年5月9日
在blockproc()的参数是块大小(横向和纵向)。你可以得到块的数量除以块大小的行和列。这是一个简单的关系
rowsInImage = blockSizeR * numberOfBlocksVertically;
做任何数学方程来得到所需要的参数。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!