作者ppt1 (.....)
看板C_and_CPP
標題[問題] 請教關於影像處理(雜訊)的問題
時間Sat Oct 24 14:13:27 2009
各位前輩好:
小弟最近在學一些影像,目前在產生雜訊部分遇到一些問題,就是感覺生產出來的
資料似乎有某種規律性。如下所示,我將資料存於*.bmp檔,但是好像跟市面上影像處理
書籍裡面的圖不太相似,不知道問題出現在哪?
麻煩各位前輩幫小弟解惑,因為看了很多文章,試了很久還是差不多(隨然pattern有變
,可是看起來還是存在著某個規律性?)
以下為uniform noise 產生出來的結果
(1) 自己寫的程式所產生出來的
http://www.wretch.cc/album/show.php?i=Albert0827&b=1&f=1606738797&p=0
(2) 一般書籍上所看到的
http://www.wretch.cc/album/show.php?i=Albert0827&b=1&f=1606738798&p=1
程式碼: (避免版面亂,標頭與*.bmp讀寫片段暫時不放)
void main(void)
{
int num, i;
double *ptr1;
num=256*256;
ptr1= new double[num];
srand((unsigned)time(NULL));
for (i=0;i<num; i++)
*(ptr1+i) = uniform(0, 255);
delete [] ptr1;
}
/* Generate a random signal between [x1, x2], where x2>x1*/
double uniform(double x1, double x2)
{
return (x2-x1)*(rand()/double(RAND_MAX))+x1;
}
另外,我有試過用Matlab 的rand()函數去作,不知道它底層是如何去運作的,感覺
效果很好!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.103.111
1F:推 joefaq:rand()會循環改個seed看看 10/24 14:15
2F:→ ppt1:是指在什麼地方改會比較好? 10/24 14:18
3F:→ VictorTom:通常seed會在程式啟動時挑一次就夠了, 程式有用srand() 10/24 14:21
4F:推 VictorTom:過, 主要是不會每次程式啟動時都產生同樣的亂數序列吧@@ 10/24 14:22
5F:推 VictorTom:請問您產生uniform亂數後是怎麼使用的??這麼漂亮的規律 10/24 14:25
6F:→ VictorTom:看起來也可能填bmp的時候填壞的@_@" 10/24 14:26
7F:→ ppt1:*bmp存檔,我看一下喔..因為之前存取都OK 所以這次沒特別注意 10/24 14:28
8F:推 VictorTom:補充一下, 小弟我是指把亂數結果寫進BMP的那一步喔:) 10/24 14:31
9F:推 VictorTom:順便說, rand()值域只在0~32767, 如果嫌不夠細的話, 可 10/24 14:36
10F:推 joefaq:剛剛試寫了一下 直接rand()很正常 = = 10/24 14:37
11F:→ ppt1:對不起各位,我耍憨了,真的跟VictorTom前輩說的一樣,我資料 10/24 14:38
12F:→ VictorTom:以用兩個以上rand()拼起來:) 所以現在是OK的意思嗎@@" 10/24 14:39
13F:→ ppt1:填錯,程式是OK的 10/24 14:39
14F:→ ppt1:剛剛查一下寫入*.bmp時,RAW位置 少一個變數 ==" 10/24 14:41
15F:→ ppt1:最後,感謝VictorTom與joefaq兩位前輩的幫忙 ^^ 10/24 14:43