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如果这是你要找的,你能接受答案吗?如果我有任何问题,我想在接受帖子之前玩一下代码:)