conv2preserveenergy.m

来自「显著区域检测。求的图像中感兴趣区域的位置」· M 代码 · 共 70 行

M
70
字号
function result = conv2PreserveEnergy(data,filter)

result = conv2(data,filter,'same');
rsize = size(result);
fsize = size(filter);
fsize2 = (fsize - 1)/2;
fsum = sum(filter(:));

ystart = 1 + fsize2(1);
yend = rsize(1) - fsize2(1);
xstart = 1 + fsize2(2);
xend = rsize(2) - fsize2(2);

if (rsize(1) > fsize(1))
  for y = 1:fsize2(1)
    % top
    fSumTop = sum(sum(filter(fsize(1)-y:fsize(1),:)));
    if (fSumTop ~= 0)
      result(y,xstart:xend) = result(y,xstart:xend) * fsum / fSumTop;
    end
    
    % bottom
    fSumBottom = sum(sum(filter(1:y,:)));
    if (fSumBottom ~= 0)
      result(rsize(1)-y+1,xstart:xend) = result(rsize(1)-y+1,xstart:xend) * fsum / fSumBottom;
    end
  end
end

if (rsize(2) > rsize(1))
  for x = 1:fsize2(2)
    % left
    fSumLeft = sum(sum(filter(:,fsize(2)-x:fsize(2))));
    if (fSumLeft ~= 0)
      result(ystart:yend,x) = result(ystart:yend,x) * fsum / fSumLeft;
    end
    
    % right
    fSumRight = sum(sum(filter(:,1:x)));
    if (fSumRight ~= 0)
      result(ystart:yend,rsize(2)-x+1) = result(ystart:yend,rsize(2)-x+1) * fsum / fSumRight;
    end
    
    % corners
    if (rsize(1) > fsize(1))
      for y = 1:fsize2(1)
        fSumTL = sum(sum(filter(fsize(1)-y:fsize(1),fsize(2)-x:fsize(2))));
        if (fSumTL ~= 0)
          result(y,x) = result(y,x) * fsum / fSumTL;
        end
        
        fSumTR = sum(sum(filter(fsize(1)-y:fsize(1),1:x)));
        if (fSumTR ~= 0)
          result(y,rsize(2)-x+1) = result(y,rsize(2)-x+1) * fsum / fSumTR;
        end
        
        fSumBL = sum(sum(filter(1:y,fsize(2)-x:fsize(2))));
        if (fSumBL ~= 0)
          result(rsize(1)-y+1,x) = result(rsize(1)-y+1,x) * fsum / fSumBL;
        end
        
        fSumBR = sum(sum(filter(1:y,1:x)));
        if (fSumBR ~= 0)
          result(rsize(1)-y+1,rsize(2)-x+1) = result(rsize(1)-y+1,rsize(2)-x+1) * fsum / fSumBR;
        end
      end
    end
  end
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?