【发布时间】:2016-05-06 10:49:24
【问题描述】:
我有一个图像,我必须在其上滑动 81*81 窗口,以便找到中心像素与周围 81*81 窗口中存在的每个像素之间的强度距离(差异),我还必须找出位置距离,即中心像素坐标与周围窗口中存在的像素坐标之间的差异。如果我使用 for 循环,那么我将不得不为此操作使用 4 个嵌套的 for 循环,这几乎需要一整天的时间来处理单个图像。我想为图像中存在的每个像素存储 81*81 强度差异,同样存储位置距离,这往往会创建一个 4D 变量。谁能建议我一些有效的方法来做到这一点。以下是我编写此代码的方式:
I = imread('House.tiff');
YCbCr = rgb2ycbcr(I);
YCbCr = double(YCbCr);
YCbCr = imresize(YCbCr,[200 200]);
[m n v] = size(YCbCr);
Y = YCbCr(:,:,1); Cb = YCbCr(:,:,2); Cr =YCbCr(:,:,3);
Y1 = padarray(Y,[20,20]);
Cb1 = padarray(Cb,[20,20]);
Cr1 = padarray(Cr,[20,20]);
window_size = 41;
p = (window_size-1)/2;
Dl = zeros(m,n,41,41); Df = zeros(m,n,41,41);
for x = 1:1:m
for y = 1:1:n
for a = -p:1:p
for b = -p:1:p
Df(x,y,a+p+1,b+p+1)= abs(Y(x,y)-Y1(x+a+p,y+b+p))+ abs(Cb(x,y)- Cb1(x+a+p,y+b+p))+ abs(Cr(x,y)- Cr1(x+a+p,y+b+p));%% intensity distance
Dl(x,y,a+p+1,b+p+1) = max(abs((x+p)-(x+a+p)),abs((y+p)-(y+b+p)));%% location distance
end
end
end
end
【问题讨论】:
标签: matlab image-processing computer-vision