Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何将圆形遮罩的外部限制更改为不同的颜色_Image_Matlab_Image Processing_Mask - Fatal编程技术网

Image 如何将圆形遮罩的外部限制更改为不同的颜色

Image 如何将圆形遮罩的外部限制更改为不同的颜色,image,matlab,image-processing,mask,Image,Matlab,Image Processing,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

我有以下功能,它成功地在图像输入上创建了一个灰色圆形遮罩,这样新图像就是圆形图像周围的灰色边框。示例:

我想做的就是把面具做成一个特别的绿色,但我一直没有成功

代码如下:

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;
函数[newIm]=mycircularmak(im)
%设置变量
rad=尺寸(im,1)/2.1;%圆窗半径
im=双(im);
[行、列、面]=大小(im);
newIm=零(行、列、平面);
%生成内部为1、外部为0的硬边圆形遮罩
M=行;
[X,Y]=meshgrid(-M/2:1:(M-1)/2,-M/2:1:(M-1)/2);
掩码=双(零(M,M));
遮罩(X.^2+Y.^2
我想使用的绿色类型是RGB值[59 178 74]。 我是MATLAB的初学者,因此非常感谢您的帮助

干杯


Steve

遮罩图像后,创建彩色版本的遮罩:

将此添加到你的蒙版图像中

编辑:

函数[newIm]=mycircularmak(im)
%设置变量
rad=尺寸(im,1)/2.1;%圆窗半径
im=双(im);
[行、列、面]=大小(im);
newIm=零(行、列、平面);
%生成内部为1、外部为0的硬边圆形遮罩
M=行;
[X,Y]=meshgrid(-M/2:1:(M-1)/2,-M/2:1:(M-1)/2);
掩码=双(零(M,M));
遮罩(X.^2+Y.^2

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

我对你的问题描述有点困惑。是否要将遮罩的边界更改为其他颜色?你的代码目前到底在做什么?是的,很抱歉,我已经重读了,这让人困惑。我想把面具的边界换成不同的颜色。该代码当前为图像应用模糊高斯圆形帧的灰色边界。我已经添加了一个图像链接作为例子。我不太确定如何实现这一点。这不就是用正方形数组覆盖“掩码”吗?我运行了你的测试面具,它在一个绿色的正方形周围产生了一个黑色的边框…我可能做错了什么。好吧,我的测试可能与你想要的相反,抱歉混淆了。黑色对应于零,因此,如果将从遮罩创建的绿色/黑色图像添加到遮罩的原始图像,您应该可以得到所需的图像。我将编辑我的答案。快关闭!现在得到了绿色边框,但是它围绕着一个白色的圆圈,而不是图像输入的圆圈。我似乎无法完成最后一步…我看不出有什么问题。尝试为创建遮罩和图像的每个步骤显示一个图像(图),看看哪个是错误的。即插入
图;imshow(mask)代码中的多个位置,并对newIm、invmask和rgbmask执行此操作。这可能会提供一些有关该问题的信息。rgbmask应该是黑色的,您希望中心图像出现的位置。
% 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;