如何计算matlab中图像的总变差
问题描述:
我正试图使用空间一阶导数的l1范数计算matlab中图像的总变差。代码是波纹管:如何计算matlab中图像的总变差
function TV = compute_total_variation1(y)
% y is the image
nbdims = 2;
% check number of channels in an image
if size(y,1)==1 || size(y,2)==1
% we have one dimension
nbdims = 1;
end
if size(y,1)>1 && size(y,2)>1 && size(y,3)>1
% we have three dimensions
nbdims = 3;
end
if nbdims==1
TV = sum(abs(diff(y)));
return;
end
% the total variation weight is 1
% weight_tv = ones(size(y));
g = gradient(y);
% compute using the l1 norm of the first order derivatives
TV = sum(abs(g),nbdims+1);
% TV = TV .* weight_tv;
TV = sum(TV(:));
我是否正确计算使用l1范数的总变差?
编辑:
function TV = compute_total_variation1(y)
% y is the image
nbdims = 2;
% check number of channels in an image
if size(y,1)==1 || size(y,2)==1
% we have one dimension
nbdims = 1;
end
if size(y,1)>1 && size(y,2)>1 && size(y,3)>1
% we have three dimensions
nbdims = 3;
end
if nbdims==1
TV = sum(abs(diff(y)));
return;
end
% the total variation weight is 1
% weight_tv = ones(size(y));
[gx gy] = gradient(y);
% compute using the l1 norm of the first order derivatives
% horizontal
TVgx = sum(abs(gx),nbdims+1);
% vertical
TVgy = sum(abs(gy),nbdims+1);
% TV = TV .* weight_tv;
TV = sum(TVgx(:)) + sum(TVgy(:));
答
你不考虑第二昏暗的衍生品:只有
g = gradient(y)
返回沿水平方向导数,以获得微分沿着垂直方向,您也需要
[gx, gy] = gradient(y);
+0
我编辑了问题并沿垂直方向添加了导数。代码现在有效吗? – Sebi 2014-08-27 12:24:21
如果你想使它更快,我宁愿像'A = abs(img(1:end-1,:) - img(2:end,:)); B = abs(img(:,1:end-1)-img(:,2:end)); sum(A(:))+ sum(B(:))' – matheburg 2014-08-27 12:01:00