Mám kód MATLAB, ktorý pridáva nejaký šumimage. Teraz chcem zobraziť histogram hluku. Dokážem vykonať histogram pôvodného obrazu a hlučného obrazu a potom môžem nájsť rozdiel medzi nimi, ale nie som si istý, či je to správne.
Tu je môj kód:
O=im2double(rgb2gray(imread("image2.jpg")));
G=imnoise(O,"salt & pepper",0.1);
%imshow([O G]);
%imhist(O);
imhist(G);
Ako môžem zobraziť len šum, ktorý som pridal do obrázka?
odpovede:
0 pre odpoveď č. 1Je to možné, ale na to potrebuje trochu trik. Aj preto, že ide o impulzívny šum, je to oveľa jednoduchší problém. Čo musíte urobiť je semienko náhodný generátor ako prvý, potom skorumpujte obraz so zvukom. Po tom, reseed generátor náhodných a zkorumpovať a šedá obraz s rovnakým druhom šumu. Môžete použiť šedý obrázok, pretože impulzívny šum alebo korenie šumu a korenia poškodzuje váš obrázok čiernymi a bielymi pixelmi, takže čo je šedé by nebolo šumu. Potom by ste našli histogram tohto obrázku a potom nastavte frekvenciu sivej hodnoty na hodnotu 0. Čo zostane, bude hluk, ktorý si prajete.
Pomocou náhodného generátora a tým, že generovanie hluku je náhodné, zaručujete, že rovnaká sekvencia hluku sa po nasadení vydá.
Nechajte napríklad obrázok kameramana:
O = im2double(imread("cameraman.tif"));
Vyzerá to ako:
imshow(O);
Teraz nechajte nasadiť náhodný generátor, poškodte obraz, znovu vložte náhodný generátor a poškodte šedý obrázok:
rng(123); % Seed random generator
G = imnoise(O, "salt & pepper", 0.1); % Corrupt image
rng(123); % Reseed random generator
H = imnoise(0.5*size(O), "salt & pepper", 0.1); % Corrupt gray image
Pozrite sa, aký je poškodený obrázok a šum na šedej snímke:
figure;
imshow(G);
figure;
imshow(H);
Ak ich porovnáte vedľa seba, uvidíte, že profily šumu sú presne rovnaké medzi oboma obrázkami. Teraz urobte histogram šedého šumného obrazu a potom odstráňte zásobník na 128, 0,5 alebo šedej farbe:
h = imhist(H);
h(129) = 0;
bar(h);
Teraz získame: