Image 如何在matlab中计算图像的总变化量
我试图在matlab中使用空间一阶导数的l1范数计算图像的总变化。代码如下:Image 如何在matlab中计算图像的总变化量,image,matlab,image-processing,variations,Image,Matlab,Image Processing,Variations,我试图在matlab中使用空间一阶导数的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 &
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(:));
您不考虑第二个dim上的衍生工具:
g = gradient(y)
仅返回沿水平维度的导数,为了获得沿垂直维度的导数,您需要
[gx, gy] = gradient(y);
如果你想让它更快,我更喜欢像
A=abs(img(1:end-1,:)-img(2:end,:);B=abs(img(:,1:end-1)-img(:,2:end));sum(A(:)+sum(B(:)
我已经编辑了问题并添加了沿垂直方向的导数。代码现在有效吗?