我正在閱讀Gonzalez和Woods的DIP第2版,並嘗試使用wxImage來處理拉普拉斯面具(第129頁& 130)。implement laplacian 3x3
float kernel [3][3]= {{1, 1, 1},{1,-8, 1},{1, 1, 1}};
這裏是處理循環:
unsigned char r,g,b;
float rtotal, gtotal, btotal; rtotal = gtotal = btotal = 0.0;
//ignore the border pixel
for(int i = 1; i<imgWidth-1; i++)
{
for(int j = 1; j<imgHeight-1; j++)
{
rtotal = gtotal=btotal =0.0;
for(int y = -1; y<=1;y++)
{
for(int x = -1; x<=1;x++)
{
// get each channel pixel value
r = Image->GetRed(i+y,j+x);
g = Image->GetGreen(i+y,j+x);
b = Image->GetBlue(i+y,j+x);
// calculate each channel surrouding neighbour pixel value base
rtotal += r* kernel[y+1][x+1];
gtotal += g* kernel[y+1][x+1] ;
btotal += b* kernel[y+1][x+1];
}
}
//edit1: here is how to sharpen the image
// original pixel - (0.2 * the sum of pixel neighbour)
rtotal = loadedImage->GetRed(x,y) - 0.2*rtotal;
gtotal = loadedImage->GetGreen(x,y) - 0.2*gtotal;
btotal = loadedImage->GetBlue(x,y) - 0.2*btotal;
// range checking
if (rtotal >255) rtotal = 255;
else if (rtotal <0) rtotal = 0;
if(btotal>255) btotal = 255;
else if(btotal < 0) btotal = 0;
if(gtotal > 255) gtotal = 255;
else if (gtotal < 0) gtotal =0;
// commit new pixel value
Image->SetRGB(i,j, rtotal, gtotal, btotal);
我申請的是到北極的圖片(灰色圖像)和我得到的是黑色和白色像素的斑點!
任何想法,我可能錯過了什麼for循環?
編輯1:終於看到周圍的谷歌後得到的答案。這dsp的東西絕對是棘手的!我添加到上面的代碼中,它會銳化圖像。
乾杯
這將是一個很好的問題dsp.stackexchange.com – Dima