【问题标题】:Local Histogram Separation Energy Implementation局部直方图分离能量实现
【发布时间】:2014-10-12 20:05:15
【问题描述】:

我正在研究水平集方法,特别是兰克顿方法paper。我尝试实现直方图分离 (HS) 能量问题(第 III.C 部分)。它基于 Bhattacharyya 来控制轮廓的演变。为了理解它,首先我们考虑给定输入图像和轮廓的全局方法。轮廓将图像分为内部和外部区域。 Bhattacharyya 距离的计算公式为

B=sqrt (P_in.*P_out)

其中 P_in 和 P_pout 是内部和外部区域的 pdf。 要将 Bhattacharyya 应用于全局级别集,您可以在 here 处查看源代码。现在我们返回兰克顿论文。它是本地级别的设置。其中,他通过 Ball 函数将图像分成小区域。然后,轮廓将这些区域分为内部和外部区域。每个小区域都有 P_in 和 P_out。我们可以计算 Bhattacharyya 距离。我做了那一步。但是我不能像正式的那样执行最后一步。你能帮助我吗??? Av 和 Au 是这些区域内部和外部的区域。这是我的主要代码。您可以在source code下载

  for its = 1:max_its   % Note: no automatic convergence test

%-- get the curve's narrow band
idx = find(phi <= 1.2 & phi >= -1.2)';  
[y x] = ind2sub(size(phi),idx);

%-- get windows for localized statistics
xneg = x-rad; xpos = x+rad;      %get subscripts for local regions
yneg = y-rad; ypos = y+rad;
xneg(xneg<1)=1; yneg(yneg<1)=1;  %check bounds
xpos(xpos>dimx)=dimx; ypos(ypos>dimy)=dimy;

%-- re-initialize u,v,Ain,Aout
Ain=zeros(size(idx)); Aout=zeros(size(idx)); 
B=zeros(size(idx));integral=zeros(size(idx));
%-- compute local stats
for i = 1:numel(idx)  % for every point in the narrow band
  img = I(yneg(i):ypos(i),xneg(i):xpos(i)); %sub image
  P = phi(yneg(i):ypos(i),xneg(i):xpos(i)); %sub phi

  upts = find(P<=0);            %local interior
  Ain(i) = length(upts)+eps;

  vpts = find(P>0);             %local exterior
  Aout(i) = length(vpts)+eps;

  %% Bha distance
  p = imhist(I(upts))/ Ain(i) + eps; % leave histograms unsmoothed
  q = imhist(I(vpts)) / Aout(i) + eps;
  B(i) = sum(sqrt(p.* q));
  term2= sqrt(p./q)/Aout(i) - sqrt(q./p)/Ain(i); %Problem in here===I don't know how to code the integral term 
  integral(i) =sum(term2(:));
end   

F =-B./2.*(1./Ain - 1./Aout) - integral./2;

【问题讨论】:

  • 为什么不能实现呢?
  • 因为它乘以一个核(高斯核),所以我尝试用卷积乘以它,但是结果和纸上的结果不一样
  • 好的。我知道了。你能把问题缩小一点吗?打开这个 SO 问题时的感觉或多或少:OMGOMG WHAT WHAT an equation, help, imouta here

标签: matlab image-processing computer-vision


【解决方案1】:

我试过这个 - 不知道它是否正确 - 它没有直方图平滑(我认为没有必要)

if type==3  % Set up for bhatt

F=zeros(size(idx,1),2);

for i = 1:numel(idx)  

img2 = img(yneg(i):ypos(i),xneg(i):xpos(i)); 
P = phi(yneg(i):ypos(i),xneg(i):xpos(i)); 

upts = find(P<=0);            %local interior
Ain = length(upts)+eps;
[u,~] = hist(img2(upts),1:256);

vpts = find(P>0);             %local exterior
Aout = length(vpts)+eps;
 [v,~] = hist(img2(vpts),1:256); 

   Ap = Ain;
   Aq = Aout;
   In=Ap;
   Out=Aq;
    try
     p = ((u))  ./ Ap + eps;
     q = ((v)) ./ Aq + eps;
     catch
     g  
    end


 B = sum(sqrt(p .* q));

 F(i)=B.*((1/numel(In))-(1/numel(Out)))+(0.5.*(1/numel(In)*(q(img(idx(i))+1)...      /p(img(idx(i))+1))))-(0.5.*(1/numel(Out)*(p(img(idx(i))+1)/q(img(idx(i))+1))));
end

【讨论】:

  • 在这种情况下我没有使用一个,据我所知,它只是直方图微分的一个平滑参数。我想它可以通过平滑图像来近似。请注意这个论点中的可能。还有一些我在这里也无法访问的代码 - cgm.technion.ac.il/Computer-Graphics-Multimedia/…。也许如果您发送电子邮件,他们可以为您提供必要的通行证。如果您确实让这个神奇的公式能够按照书面形式发挥作用,那么如果您能分享它,那就太好了。
  • 是的,我也尝试下载它,在查看 James Malcolms 实现时 - 他在实现中也没有使用内核。从实验来看,这种距离测量似乎对于局部区域轮廓来说是一个糟糕的主意。它经常卡在平均值做得更好的区域。尤其是在查看靠近感兴趣对象的同质区域中的背景和前景 pdf 时 - 我认为这是花费大量时间在上面的事情之一,只是教育我们一点,但我们的工作无处可去。跨度>
  • @user3546025:对,James Malcomlms 方法是基于全局活动区域的 Bha 距离。但是,我展示的论文是局部活动轮廓。所以我认为兰克顿试图针对不均匀区域进行改进。如果您从本网站下载代码,请通过 mjohn1282@gmail.com 分享给我
  • 是的,我已经为(至少尝试过)基于局部区域的活动轮廓做了它。如果您下载了 Shawn Lanktons 方法,只需将方法 1 或 2 替换为我在上面添加的代码并让它运行。它在某些情况下有效,但当我认为它不是方法而不是脚本的问题时。
  • 欢迎您使用我的代码,但我不知道如何在此处发送消息。请给我发消息,我会把我的代码发给你。
猜你喜欢
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
相关资源
最近更新 更多