顯示廣告
隱藏 ✕
看板 Knuckles
作者 Knuckles(阿德)
標題 Re: DIP作業二
時間 2007年11月10日 Sat. PM 10:15:32


關於 Local Histogram Equalization
我的作法是
先設一個Window Size(例如設為9x9)
然後對圖上的每個點(x,y)
求四週9x9範圍內的Histgram存進hist陣列
然後只對(x,y)那個點做Histogram Equalization
例如那個點的灰階值為100

       255    100
則 s = ── x  Σ hist[j]
       9x9    j=0

將求得的結果s存進新的圖的(x,y)位置

參考程式碼:
	
CImage img1_LHE; 
	
img1_LHE.Create(width,height,8);
	
int w = 9; //window size

	
for(y=0; y<height; y++)
	
	
for(x=0; x<width; x++){
	
	
	
//計算Local Histogram
	
	
	
for(i=0;i<256;i++) 
	
	
	
	
hist[i] = 0; 
	
	
	
for(y2=y-(w-1)/2; y2<=y+(w-1)/2; y2++)
	
	
	
	
for(x2=x-(w-1)/2; x2<=x+(w-1)/2; x2++){
	
	
	
	
	
if(y2<0 || y2>=height || x2<0 || x2>=width) 
	
	
	
	
	
	
continue;
	
	
	
	
	
hist[img1.GetGrayPixel(x2,y2)]++;
	
	
	
	
}
	
	
	
//Local Histogram Equalization
	
	
	
k = img1.GetGrayPixel(x,y);
	
	
	
s = 0;
	
	
	
for(j=0; j<k; j++)
	
	
	
	
s += hist[j];
	
	
	
s = s*255/(w*w);
	
	
	
img1_LHE.SetGrayPixel(x,y,s);
	
	
}
	
img1_LHE.SaveBmpFile("LHE.bmp");
	
printf("已建立Local Histogram Equalization,檔名為LHE.bmp\n");
結果:

Window size = 9
[圖]


Window size = 100
[圖]



--
※ 來源: 台大電信 DISP 實驗室 (http://disp.twbbs.org)
※ 作者: Knuckles  來自: 140.112.175.130  時間: 2007-11-10 22:15:32
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2007-11-10 22:15:56
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2007-11-10 22:29:16
推 bookie: 好短 >>140.112.19.209 11-10 23:45
推 pose: s = s*255/(w*w);  <== w*w需要做修改否則邊緣會較暗 >>140.112.19.232 11-11 01:01
推 Knuckles: 有道理耶 那我自己的再改一改 謝啦 >>140.112.175.130 11-11 01:31
推 keanos: 纯推不下 >>61.216.7.245 11-11 23:22
※ 編輯: Knuckles  來自: 140.112.175.128  時間: 2008-10-13 04:16:42
※ 編輯: Knuckles  來自: 140.112.175.128  時間: 2008-10-13 04:17:14
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2009-05-31 15:17:09
※ 編輯: Knuckles  時間: 2010-10-23 04:40:33  來自: 111-248-0-184.dynamic.hinet.net
※ 同主題文章:
  11-08 15:42 Knuckles □ DIP作業二
● 11-10 22:15 Knuckles Re DIP作業二
※ 看板: KnucklesNote 文章推薦值: 4 目前人氣: 0 累積人氣: 4167 
※ 文章分類: 程式設計 C/C++
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇