[問題] 請教關於影像處理(雜訊)的問題

看板C_and_CPP (C/C++)作者 (.....)時間16年前 (2009/10/24 14:13), 編輯推噓6(609)
留言15則, 3人參與, 最新討論串1/1
各位前輩好: 小弟最近在學一些影像,目前在產生雜訊部分遇到一些問題,就是感覺生產出來的 資料似乎有某種規律性。如下所示,我將資料存於*.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

10/24 14:15, , 1F
rand()會循環改個seed看看
10/24 14:15, 1F

10/24 14:18, , 2F
是指在什麼地方改會比較好?
10/24 14:18, 2F

10/24 14:21, , 3F
通常seed會在程式啟動時挑一次就夠了, 程式有用srand()
10/24 14:21, 3F

10/24 14:22, , 4F
過, 主要是不會每次程式啟動時都產生同樣的亂數序列吧@@
10/24 14:22, 4F

10/24 14:25, , 5F
請問您產生uniform亂數後是怎麼使用的??這麼漂亮的規律
10/24 14:25, 5F

10/24 14:26, , 6F
看起來也可能填bmp的時候填壞的@_@"
10/24 14:26, 6F

10/24 14:28, , 7F
*bmp存檔,我看一下喔..因為之前存取都OK 所以這次沒特別注意
10/24 14:28, 7F

10/24 14:31, , 8F
補充一下, 小弟我是指把亂數結果寫進BMP的那一步喔:)
10/24 14:31, 8F

10/24 14:36, , 9F
順便說, rand()值域只在0~32767, 如果嫌不夠細的話, 可
10/24 14:36, 9F

10/24 14:37, , 10F
剛剛試寫了一下 直接rand()很正常 = =
10/24 14:37, 10F

10/24 14:38, , 11F
對不起各位,我耍憨了,真的跟VictorTom前輩說的一樣,我資料
10/24 14:38, 11F

10/24 14:39, , 12F
以用兩個以上rand()拼起來:) 所以現在是OK的意思嗎@@"
10/24 14:39, 12F

10/24 14:39, , 13F
填錯,程式是OK的
10/24 14:39, 13F

10/24 14:41, , 14F
剛剛查一下寫入*.bmp時,RAW位置 少一個變數 =="
10/24 14:41, 14F

10/24 14:43, , 15F
最後,感謝VictorTom與joefaq兩位前輩的幫忙 ^^
10/24 14:43, 15F
文章代碼(AID): #1AufiAXp (C_and_CPP)
文章代碼(AID): #1AufiAXp (C_and_CPP)