【发布时间】:2015-01-12 16:07:59
【问题描述】:
所以我想测量图像的垂直边缘,以便稍后将其用作 2D 到 3D 转换的深度提示。
为此,我必须计算每个块的水平梯度值以测量垂直边缘,如下所示:
̅ g(x,y) = 1/N ∑_((x',y')∈ Ω(x,y))〖g(x', y')〗
地点:
g(x',y') 是像素位置 (x',y') 处的水平梯度,
omega(x,y) 是像素位置(x',y')的邻域
和 N 是 omega(x,y) 中的像素数。
这是我在 matlab 上所做的:
I = im2double(imread('landscape.jpg'));
% convert RGB to gray
gI = rgb2gray(I);
[nrow, ncol] = size(gI);
% divide the image into 4-by-4 blocks
gI = mat2tiles((gI),[4,4]);
N = 4*4; % block size
% For each block, compute the horizontal gradient
gI = reshape([gI{:}],4*4, []);
mask = fspecial('sobel');
g = imfilter(gI, mask);
g_bar = g./N;
g_bar = reshape(g_bar,nrow, ncol);
我是 Matlab 新手,所以我不确定我的代码是否以正确的方式表达方程式。
如果您认为它是正确的,请告诉我?因为我不确定如何测试输出!
【问题讨论】:
-
顺便说一句,我建议看看
blockproc- 这可能比所有reshape-juggling 更好(而且更快)。 -
旁注:看看我的研究。我的博士论文是关于 2D 到 3D 转换 - scholar.google.ca/citations?user=5piX29gAAAAJ
-
@rayryeng 会的,谢谢。
标签: image matlab image-processing coding-style gradient