之前有文章寫到過邊緣檢測
sobel算子和Prewitt算子和拉普拉斯算子
那是對灰度圖像進行處理的,如果我們對彩色圖像的RGB三個通道都坐邊緣檢測並將結果合起來會怎樣呢?
沒錯!就會出現彩色邊緣~
說來就來,爲了實現這個功能,我修改了Image類,添加了RGB三通道的保存,如下:
彩色邊緣代碼:
運行結果:
以上
那是對灰度圖像進行處理的,如果我們對彩色圖像的RGB三個通道都坐邊緣檢測並將結果合起來會怎樣呢?
沒錯!就會出現彩色邊緣~
說來就來,爲了實現這個功能,我修改了Image類,添加了RGB三通道的保存,如下:
<span style="font-size:14px;"><span style="font-size:10px;">public class Image{
public int h;
public int w;
public int[] data;
public int[] red;
public int[] green;
public int[] blue;
public boolean gray;
}</span></span>
彩色邊緣代碼:
<span style="font-size:14px;"><span style="font-size:10px;">public Image filter() {
if(this.img.gray)
return this.img; // Grayscale images can not be processed
for (int j = 1; j < this.img.h-1; j++) {
for (int i = 1; i < this.img.w-1; i++) {
int w = this.img.w;
int r1 = this.img.red[i-1+(j+1)*w]+2*this.img.red[i+(j+1)*w]+this.img.red[i+1+(j+1)*w]-this.img.red[i-1+(j-1)*w]-2*this.img.red[i+(j-1)*w]-this.img.red[i+1+(j-1)*w];
int r2 = this.img.red[i+1+(j-1)*w]+2*this.img.red[i+1+(j)*w]+this.img.red[i+1+(j+1)*w]-this.img.red[i-1+(j-1)*w]-2*this.img.red[i-1+(j)*w]-this.img.red[i-1+(j+1)*w];
int g1 = this.img.green[i-1+(j+1)*w]+2*this.img.green[i+(j+1)*w]+this.img.green[i+1+(j+1)*w]-this.img.green[i-1+(j-1)*w]-2*this.img.green[i+(j-1)*w]-this.img.green[i+1+(j-1)*w];
int g2 = this.img.green[i+1+(j-1)*w]+2*this.img.green[i+1+(j)*w]+this.img.green[i+1+(j+1)*w]-this.img.green[i-1+(j-1)*w]-2*this.img.green[i-1+(j)*w]-this.img.green[i-1+(j+1)*w];
int b1 = this.img.blue[i-1+(j+1)*w]+2*this.img.blue[i+(j+1)*w]+this.img.blue[i+1+(j+1)*w]-this.img.blue[i-1+(j-1)*w]-2*this.img.blue[i+(j-1)*w]-this.img.blue[i+1+(j-1)*w];
int b2 = this.img.blue[i+1+(j-1)*w]+2*this.img.blue[i+1+(j)*w]+this.img.blue[i+1+(j+1)*w]-this.img.blue[i-1+(j-1)*w]-2*this.img.blue[i-1+(j)*w]-this.img.blue[i-1+(j+1)*w];
int tr = (Math.abs(r1)+Math.abs(r2));
int tg = (Math.abs(g1)+Math.abs(g2));
int tb = (Math.abs(b1)+Math.abs(b2));
this.img.data[i + j * this.img.w] = (255 << 24) | (math.st(tr) << 16) | (math.st(tg) << 8) | math.st(tb);
}
}
this.img.gray = false;
return this.img;
}</span></span>
運行結果:
以上