/ / Генериране на Гаусов образ без добавяне на шум - matlab, обработка на изображения

Генериране на Гаусово изображение без добавяне на шум - matlab, обработка на изображения

Искам да генерираме Гаусово изображение от Matlab. Има 3 кръга (като три класа). Интензитетът във всеки кръг ще бъде последван от Gaussian разпределение. По този начин хистограмата на изображението ще бъде мултиплицирано Gaussian разпределение като a въпрос, Използвах обаче изображение със свободен шум и го добавихс Gaussian шум, за да направят мултиплицираното разпределение на Гаус, това е много шум. В този въпрос, аз търся начин да генерира синтетичен Гаусов образ, който е различен от предишния ми метод (добавяне на шум). Благодаря за четенето

Отговори:

2 за отговор № 1

Следващият код създава изображение, следващо смес от 3 Gaussians (много лесно се екстраполира към повече Gaussians, ако е необходимо), като генерира монотонно намаляващо изображение на квадратен шаблон.

Начинът, по който работи, е

  1. Генерирайте случайни номера след желаните разпределения
  2. Сортирайте споменатите числа
  3. Спирала от центъра на изображението навън и вмъкнете сортирани стойности пиксел по пиксел

Код:

rows=256; columns=256;
grayImage=zeros(rows,columns);

% We will work with doubles in the range of 0-255, and then we will
% discretize, for the shake of dealing properly with random numbers

%define gaussians
mean1=30;   std1=10;
mean2=100;  std2=10;
mean3=130;  std3=5;

% how many points on each of them??
% equal:
n=ceil(rows*columns/3);
% Random samples I tested to make it look as your image
n1=ceil(rows*columns/5);
n2=ceil(2/5*rows*columns);
n3=ceil(2/5*rows*columns);
%generate random numbers
rnd1=normrnd(mean1,std1,n1,1);
rnd2=normrnd(mean2,std2,n2,1);
rnd3=normrnd(mean3,std3,n3,1);

%now the hard part.


rnd=[rnd1;rnd2;rnd3];
% Does this looks like what you want? Tune above parameters if it doesnt.
% histogram(rnd)

% Sort the data
rnd=sort(rnd,"descend");


% Here comes the tricky part: filling the image. I chose square shaped, and
% I fill it in a spiral, starting from the center
% web("https://stackoverflow.com/questions/398299/looping-in-a-spiral")
x= 0;
y= 0;
dx = 0;
dy = -1;
next=1;
for ii= 1:rows*columns
if (-rows/2 < x <= rows/2) && (-columns/2 < y <= columns/2)
grayImage(x+columns/2,y+rows/2)=rnd(next);
next=next+1;
end
if x == y || (x < 0 && x == -y) || (x > 0 && x == 1-y)
auxdx=dx;
dx=-dy;
dy =auxdx;
end
x=x+dx;
y=y+dy;
end


%
subplot(121);imshow(uint8(grayImage)); title("Syntetic image");
subplot(122);imhist(uint8(grayImage)); title("Histogram");

изход:

въведете описанието на изображението тук

Моля, не се колебайте да ми зададете някакъв въпрос относно кода, но се надяваме, че е съвсем самостоятелно обяснителен.