Matlab 在图像的特定部分应用高斯分布

Matlab 在图像的特定部分应用高斯分布,matlab,Matlab,例如,我有下面的图像和相应的遮罩 我想用高斯加权白圈内的像素,g=@(x,y,xc,yc)exp(-((x-xc)^2)/0.5+((y-yc)^2)/0.5)),放置在遮罩的(xc,yc)中x,y是相应像素的坐标。您能建议一种不使用for循环的方法吗 谢谢 通过对椭圆内的像素进行“加权”,我假设您的意思是将元素乘以二维高斯分布。如果是这样,代码如下: % Read images img = imread('img.jpg'); img = im2double(rgb2gray(img));

例如,我有下面的图像和相应的遮罩

我想用高斯加权白圈内的像素,
g=@(x,y,xc,yc)exp(-((x-xc)^2)/0.5+((y-yc)^2)/0.5)),放置在遮罩的
(xc,yc)
x
y
是相应像素的坐标。您能建议一种不使用for循环的方法吗

谢谢

通过对椭圆内的像素进行“加权”,我假设您的意思是将元素乘以二维高斯分布。如果是这样,代码如下:

% Read images
img = imread('img.jpg');
img = im2double(rgb2gray(img));
mask = imread('mask.jpg');
mask = im2double(rgb2gray(mask)) > 0.9; % JPG Compression resulted in some noise

% Gaussian function
g = @(x,y,xc,yc) exp(-(((x-xc).^2)/500+((y-yc).^2)./200)); % Should be modified to allow variances as parameters

% Use rp to get centroid and mask
rp_mask = regionprops(mask,'Centroid','BoundingBox','Image');

% Form coordinates
centroid = round(rp_mask.Centroid);
[coord_x coord_y] = meshgrid(ceil(rp_mask.BoundingBox(1)):ceil(rp_mask.BoundingBox(1))+rp_mask.BoundingBox(3)-1, ...
                             ceil(rp_mask.BoundingBox(2)):ceil(rp_mask.BoundingBox(2))+rp_mask.BoundingBox(4)-1);

% Get Gaussian Mask
gaussian_mask = g(coord_x,coord_y,centroid(1),centroid(2));
gaussian_mask(~rp_mask.Image) = 1; % Set values outside ROI to 1, this negates weighting outside ROI

% Apply Gaussian - Can use temp variables to make this shorter
img_g = img;
img_g(ceil(rp_mask.BoundingBox(2)):ceil(rp_mask.BoundingBox(2))+rp_mask.BoundingBox(4)-1, ...
     ceil(rp_mask.BoundingBox(1)):ceil(rp_mask.BoundingBox(1))+rp_mask.BoundingBox(3)-1) =  ...
     img(ceil(rp_mask.BoundingBox(2)):ceil(rp_mask.BoundingBox(2))+rp_mask.BoundingBox(4)-1, ...
     ceil(rp_mask.BoundingBox(1)):ceil(rp_mask.BoundingBox(1))+rp_mask.BoundingBox(3)-1) .* gaussian;

% Show
figure, imshow(img_g,[]);
结果是:

如果您希望在该roi内执行某些过滤,则有一个名为
roifilt2
的函数,该函数也允许您过滤该区域内的图像:

img_filt = roifilt2(fspecial('gaussian',[21 21],10),img,mask);
figure, imshow(img_filt,[]);
结果是:


看看这个:可能是重复的我不太确定它是重复的。这是有点不清楚,但问题从来没有要求应用高斯滤波器,只是为了加权的圆形遮罩内的像素。如果真的是这样的话,这是一个不同的问题,但这似乎并不是特别有用。我想我所问的是不同的。看@jucestain first snippet。谢谢,我想第一个片段就是我要问的。@Thoth如果这是你要找的,你能接受答案吗?如果我有任何问题,我想在接受帖子之前玩一下代码:)