xfdxz 发表于 2006-11-22 21:16

请教怎样对图像的某一块加高斯噪声?

J = imnoise(I,'gaussian',m,v) 对整个图像添加高斯噪声
现在我想做的是 只对图像的某一椭圆区域添加高斯噪声
= meshgrid(1:128, 1:128);
sigma1=50;
sigma2=100;
xc=40;
yc=64;   %xc yc 二维高斯中心
X=X1-xc;
Y=Y1-yc;
g = 1/(2*pi*sigma1*sigma2)*exp(-(X.^2./(2*sigma1))-(Y.^2./(2*sigma2)));
我用上面的代码(二维高斯函数公式)产生的噪声信号g,但是g的值都很小, 而且直接添加在图像上也不可能有imnoise的效果
到底应该怎么做呢?

xfdxz 发表于 2006-11-23 14:46

解决了一部分问题

经过朋友的提点 我用randn函数产生高斯噪声 然后用一个模板与这个高斯矩阵相乘得到了一个区域的噪声

但是我其实希望添加的是一个彩色高斯噪声 确切的说 是在一个蓝色背景上加上黄色的高斯噪声

happy 发表于 2006-11-23 15:44

I=imread('test2.jpg');
imshow(I);
J=imnoise(I,'gaussian');
=size(I);
a=100;
b=80;
for i=1:m
    for j=1:n
      if((i-250)^2/a^2+(j-160)^2/b^2 <= 1)
            I(i,j,:) = J(i,j,:);
      end
    end
end
figure(2)
imshow(I)
imwrite(I,'test3','jpg');

其中循环部分是确定椭圆区域的位置

原图:


处理后的效果图:

xfdxz 发表于 2006-11-23 16:35

谢谢happy! 再次请教:

谢谢happy 你的方法比我想的简单多了:)
还有问题:
我希望在一个蓝色的背景上产生三个椭圆的高斯噪声 分别为红色 黄色 绿色代码如下:
Img = zeros(128,128,3);

% Img 蓝色背景
Img(:,:,1) = 0;
Img(:,:,2) = 0;
Img(:,:,3) = 255;

% 三个彩色高斯噪声(RGB模型)
g1=zeros(128,128,3);
g2=zeros(128,128,3);
g3=zeros(128,128,3);

%彩色的高斯噪声
g1(:,:,1) = 2000*randn(128,128); %红色
g1(:,:,2) = 0;
g1(:,:,3) = 0;

g2(:,:,1) = 0; %???希望是黄色
g2(:,:,2) = 0; %怎样设置
g2(:,:,3) = 0;

g3(:,:,1) = 0;
g3(:,:,2) = 2000*randn(128,128); %绿色
g3(:,:,3) = 0;

for i=1:128
    for j=1:128
      if (i-64)^2/30^2+(j-20)^2/15^2<1
            Img(i,j,:)=Img(i,j,:)+g1(i,j,:);
      end
      if (i-64)^2/30^2+(j-60)^2/15^2<1
            Img(i,j,:)=Img(i,j,:)+g2(i,j,:);
      end
      if (i-64)^2/30^2+(j-100)^2/15^2<1
            Img(i,j,:)=Img(i,j,:)+g3(i,j,:);
      end
    end
end

% 在蓝色背景上添加彩色高斯噪声
s = uint8(Img);
imshow(s);

但是黄色的高斯噪声 应该怎样设置g2个分量的值呢? 除去黄色以外这段代码生成的图是:

happy 发表于 2006-11-23 16:47

Img = zeros(128,128,3);

% Img 蓝色背景
Img(:,:,1) = 0;
Img(:,:,2) = 0;
Img(:,:,3) = 255;

% 三个彩色高斯噪声(RGB模型)
g1=zeros(128,128,3);
g2=zeros(128,128,3);
g3=zeros(128,128,3);

%彩色的高斯噪声
g1(:,:,1) = 2000*randn(128,128); %红色
g1(:,:,2) = 0;
g1(:,:,3) = 0;

g22=randn(128,128);
g2(:,:,1) = 2000*g22; %???希望是黄色
g2(:,:,2) = 2000*g22; %怎样设置
g2(:,:,3) = 0;

g3(:,:,1) = 0;
g3(:,:,2) = 2000*randn(128,128); %绿色
g3(:,:,3) = 0;

for i=1:128
    for j=1:128
      if (i-64)^2/30^2+(j-20)^2/15^2<1
            Img(i,j,:)=Img(i,j,:)+g1(i,j,:);
      end
      if (i-64)^2/30^2+(j-60)^2/15^2<1
            Img(i,j,:)=Img(i,j,:)+g2(i,j,:);
      end
      if (i-64)^2/30^2+(j-100)^2/15^2<1
            Img(i,j,:)=Img(i,j,:)+g3(i,j,:);
      end
    end
end

% 在蓝色背景上添加彩色高斯噪声
s = uint8(Img);
imshow(s);

realyyy 发表于 2006-11-24 10:14

happy教授就是厉害!受益良多!太感谢了!

樟树 发表于 2011-6-29 11:27

学习了…………
页: [1]
查看完整版本: 请教怎样对图像的某一块加高斯噪声?