我有一个图像,我想裁剪一个点周围感兴趣的圆形区域我在MATLAB中做了以下工作:

  vessel=imread('vessel.jpg');
  imshow( vessel)
  t = 0:pi/20:2*pi;
  xc=230; % point around which I want to extract/crop image
  yc=79;
  r=20;   %Radium of circular region of interest
  xcc = r*cos(t)+xc;
   ycc =  r*sin(t)+yc;
   roimaskcc = poly2mask(double(xcc),double(ycc), size(vessel,1),size(vessel,2));
   pr_gccc = find(roimaskcc);
   roimean_cc= mean(vessel(pr_gccc));
  figure, imshow(roimaskcc)

roimaskcc是正确的,但当我执行以下操作时,它给出的是nX1矩阵,而不是掩模下的感兴趣区域:
  vessel_undermask=vessel(roimaskcc==1);

任何人都可以帮助提取兴趣点(xc,yc)周围的圆形兴趣区域。
谢谢

最佳答案

你要做的是从面具外面的vessel中提取所有东西因为不存在循环矩阵,所以Matlab的解决方案是在掩码中输出一个包含所有值的向量。
虽然这在技术上是正确的,但是这个向量很难处理另一种解决方案是保留数据矩阵为正方形,并将掩码之外的所有内容设置为NaN

% make a copy
vessel_undermask = vessel;

% NaN everything outside the mask (in R, G and B layers)
vessel_undermask(repmat(~roimaskcc,[1,1,3])) = NaN;

imshow(vessel_undermask)

这应该会给你一个矩阵,更容易使用。
请注意
vessel_undermask(~isnan(vessel_undermask)) ==  vessel(roimaskcc)

10-08 00:44