【问题标题】:How can I change the outer limits of a Circular mask to a different colour如何将圆形蒙版的外部限制更改为不同的颜色
【发布时间】:2015-12-11 21:13:38
【问题描述】:

我有以下函数可以成功地在图像输入上创建一个灰色圆形蒙版,这样新图像就是圆形图像周围的灰色边框。示例:Grey circular mask

我想做的只是让面具变成一个非常特殊的绿色,但我没有成功。

代码如下:

function [newIm] = myCircularMask(im)

%Setting variables
rad = size(im,1)/2.1; %Radius of the circle window
im = double(im); 
[rows, cols, planes]= size(im);
newIm = zeros(rows, cols, planes);

%Generating hard-edged circular mask with 1 inside and 0 outside
M = rows;
[X,Y] = meshgrid(-M/2:1:(M-1)/2, -M/2:1:(M-1)/2);
mask = double(zeros(M,M));
mask(X.^2 + Y.^2 < rad^2) = 1;

% Soften edge of mask
gauss = fspecial('gaussian',[12 12],0.1);
mask = conv2(mask,gauss,'same'); 

% Multiply image by mask, i.e. x1 inside x0 outside
for k=1:planes
newIm(:,:,k) = im(:,:,k).*mask;
end

% Make mask either 0 inside or -127 outside
mask = (abs(mask-1)*127);

% now add mask to image
for k=1:planes
newIm(:,:,k) = newIm(:,:,k)+mask;
end
newIm = floor(newIm)/255;

我想使用的绿色类型是 RGB 值 [59 178 74]。 我是 MATLAB 的初学者,因此我们将不胜感激。

干杯!

史蒂夫

【问题讨论】:

  • 我对你的问题描述有点困惑。您想将遮罩的边界更改为不同的颜色吗?您的代码目前具体在做什么?
  • 是的,抱歉,现在我重新阅读了它,这令人困惑。我想将蒙版的边界更改为不同的颜色。该代码当前为图像应用带有模糊高斯圆形框架的灰色边界。我添加了一个图片链接作为示例。

标签: image matlab image-processing mask


【解决方案1】:

蒙版后,创建蒙版的彩色版本:

% test with simple mask
mask = ones(10,10);
mask(5:7,5:7)=0;
% invert mask, multiply with rgb-values, make rgb-matrix:
r_green=59/255; g_green=178/255; b_green=74/255;
invmask=(1-mask); % use mask with ones/zeroes
rgbmask=cat(3,invmask*r_green,invmask*g_green,invmask*b_green);

将此添加到您的蒙版图像中。

编辑:

function [newIm] = myCircularMask(im)

%Setting variables
rad = size(im,1)/2.1; %Radius of the circle window
im = double(im); 
[rows, cols, planes]= size(im);
newIm = zeros(rows, cols, planes);

%Generating hard-edged circular mask with 1 inside and 0 outside
M = rows;
[X,Y] = meshgrid(-M/2:1:(M-1)/2, -M/2:1:(M-1)/2);
mask = double(zeros(M,M));
mask(X.^2 + Y.^2 < rad^2) = 1;

% Soften edge of mask
gauss = fspecial('gaussian',[12 12],0.1);
mask = conv2(mask,gauss,'same'); 

% Multiply image by mask, i.e. x1 inside x0 outside
for k=1:planes
   newIm(:,:,k) = im(:,:,k).*mask;
end

% Here follows the new code:
% invert mask, multiply with rgb-values, make rgb-matrix:
r_green=59/255; g_green=178/255; b_green=74/255;
invmask=(1-mask); % use mask with ones/zeroes
rgbmask=cat(3,invmask*r_green,invmask*g_green,invmask*b_green);
newIm=newIm+rgbmask;

请注意,我无法测试我的建议,因此可能存在错误。

【讨论】:

  • 我不太确定如何实现这一点。那不会只是用方形数组覆盖“掩码”吗?我运行了你的测试掩码,它在绿色方块周围产生了黑色边框......我可能做错了什么。
  • 好吧,我的测试可能与您想要的相反,很抱歉造成混乱。黑色对应于零,因此如果您将从蒙版创建的绿色/黑色图像添加到蒙版的原始图像,您应该得到您想要的。我将编辑我的答案。
  • 太近了!现在得到了绿色边框,但它围绕着一个白色圆圈而不是图像输入的圆圈。我似乎无法完成最后一步......
  • 我看不出有什么问题。尝试为创建蒙版和图像的每个步骤显示图像(图),看看哪个是错误的。也就是说,在代码中插入figure; imshow(mask); 几个位置,并对newIm、invmask 和rgbmask 也执行此操作。这可能会提供有关该问题的一些信息。 rgbmask 应该是黑色的,您希望中​​心图像出现在此处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
相关资源
最近更新 更多