JAVA求教 Image Processing filter問題
本帖最後由 ip4368 於 2014-12-7 12:06 編輯
- private void convolve(int[][] f, double[][] filter) {
- int filterSize = filter.length;
- int M = f.length; //height
- int N = f[0].length; //width
- int[][] copy = new int[f.length][f[0].length];
- for (int i = 0; i < f.length; i++)
- System.arraycopy(f[i], 0, copy[i], 0, f[0].length);
- int sl = (filterSize-1)/2;
- for (int i = sl; i < f.length-sl; i++)
- for (int j = sl; j < f[0].length-sl; j++){
- double temp = 0.0;
- for (int y = 0; y < filterSize; y++)
- for (int z = 0; z < filterSize; z++)
- temp += copy[i-sl+y][j-sl+z]*filter[y][z];
- f[i][j]= (int) temp;
- if (f[i][j]<0)
- f[i][j]=0;
- if (f[i][j]>255)
- f[i][j]=255;
- }
- }
複製代碼 我寫完, 如果用box smoothing嘅kernel係成功做到, 同professor個example一模一樣, 但我放laplacian filter就唔得, 個樣差好遠.
我google其他convolve嘅又應該一樣concept, 唔知錯咩, 希望各位ching可以幫幫手
(professor話ignore個boundary)
---------------------------------------------------------------------------------------------------
update寫完, 原來幅圖D pixel out of range會出255, 所以要將<0嘅pixel轉返0, 就正常做到. 要做返好, 所以將>255都轉返255 |
|
|