将图像块分成两个块
Divide image blocks into two chunks
我正在处理一张图像并将其分成不重叠的块,我接下来要做的是对相同块的每两个相邻块应用一些更改。比如我有一个B1块,我把它分成了B11和B12。
这里的objective是对B11和B12应用SVD并比较它们的奇异值:S11(2,2)
和S12(2,2)
等每隔一个块。但是我不知道如何处理每两个相邻的子块我只能对块 Bi 应用 SVD。
看来我需要一个循环 for
来正确处理每两个子块,或者函数 mat2tiles
可以这样做吗?
这是一个解释我所说内容的例子。
我终于找到了如何获得我的 objective 的方法,我正在分享以防有人需要:
%First this a function that help me to divide my image into non overlapping block
function B=Block(IM,p,q)
p=p %% number of rows
q=q %% number of cols
[m,n] = size(IM);
IJ = zeros(p,q);
z = 1;
for m1 = 1:m/p
for n1 = 1:n/q
if m1*p <= m;
if n1*q <= n;
for i = (m1-1)*p+1:m1*p
for j = (n1-1)*q+1:n1*q
IJ(i-(m1-1)*p,j-(n1-1)*q) = IM(i,j);
if (i-(m1-1)*p)==p&&(j-(n1-1)*q)==q;
OUT = IJ;
B{1,z} = OUT;
z = z+1;
end
end
end
end
end
end
end
现在我将每个块分成子块并应用 SVD
Block_Num = (m*n)/(p*q) % To get how many blocks we have
fun= @svd % the function we use is SVD
for i=1:Block_Num
sv=blkproc(B{i},[4 4],fun) % in my case I wanted to apply SVD
of every sub-block of 4*4
end
这就完成了工作。希望对你也有用
我正在处理一张图像并将其分成不重叠的块,我接下来要做的是对相同块的每两个相邻块应用一些更改。比如我有一个B1块,我把它分成了B11和B12。
这里的objective是对B11和B12应用SVD并比较它们的奇异值:S11(2,2)
和S12(2,2)
等每隔一个块。但是我不知道如何处理每两个相邻的子块我只能对块 Bi 应用 SVD。
看来我需要一个循环 for
来正确处理每两个子块,或者函数 mat2tiles
可以这样做吗?
这是一个解释我所说内容的例子。
我终于找到了如何获得我的 objective 的方法,我正在分享以防有人需要:
%First this a function that help me to divide my image into non overlapping block
function B=Block(IM,p,q)
p=p %% number of rows
q=q %% number of cols
[m,n] = size(IM);
IJ = zeros(p,q);
z = 1;
for m1 = 1:m/p
for n1 = 1:n/q
if m1*p <= m;
if n1*q <= n;
for i = (m1-1)*p+1:m1*p
for j = (n1-1)*q+1:n1*q
IJ(i-(m1-1)*p,j-(n1-1)*q) = IM(i,j);
if (i-(m1-1)*p)==p&&(j-(n1-1)*q)==q;
OUT = IJ;
B{1,z} = OUT;
z = z+1;
end
end
end
end
end
end
end
现在我将每个块分成子块并应用 SVD
Block_Num = (m*n)/(p*q) % To get how many blocks we have
fun= @svd % the function we use is SVD
for i=1:Block_Num
sv=blkproc(B{i},[4 4],fun) % in my case I wanted to apply SVD
of every sub-block of 4*4
end
这就完成了工作。希望对你也有用