這是常見影像處理中的Sobel邊緣偵測法~ 有興趣的人不妨玩玩哦~
相關的演算法細節~ 請參閱Google大神中的Sobel影像處理一節~
Sobel
import flash.display.BitmapData;
function Sobel():Void
{
var myBitmapData:BitmapData = BitmapData.loadBitmap("bear");
var height:Number = myBitmapData.height;
var width:Number = myBitmapData.width;
var gray:Array = new Array(width);
for(var i:Number = 0 ; i < width ; i++)
gray[i] = new Array(height);
var gray2:Array = new Array(width);
for(var i:Number = 0 ; i < width ; i++)
gray2[i] = new Array(height);
var sobscale = 1.0;
var offsetval = 0;
// RGB to GRAY
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
var rgb:Number = myBitmapData.getPixel(i,j);
var r:Number = 0xFF&(rgb >> 16);
var g:Number = 0xFF&(rgb >> 8);
var b:Number = 0xFF&rgb;
gray[i][j]= 0.299*r + 0.587*g +0.114*b;
}
}
for(var x = 1; x < width-1;x++)
{
for(var y = 1; y < height-1;y++)
{
/**
00(a) 10(b) 20(c)
01(d) 11(*) 21(e)
02(f) 12(g) 22(h)
*/
var a = gray[x-1][y-1];
var b = gray[x][y-1];
var c = gray[x+1][y-1];
var d = gray[x-1][y];
var e = gray[x+1][y];
var f = gray[x-1][y+1];
var g = gray[x][y+1];
var h = gray[x+1][y+1];
var hor = (a+d+f) - (c+e+h);
if(hor < 0)
hor = -hor;
var vert = (a+b+c) - (f+g+h);
if(vert < 0)
vert = -vert;
var gc = (sobscale * (hor + vert));
gc = (gc + offsetval);
if (gc > 255)
gc = 255;
gray2[x][y] = 0xff000000 |gc<<16 | gc<<8 | gc;
}
}
//set pixel value
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
myBitmapData.setPixel(i,j,gray2[i][j]);
}
}
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
}
Sobel();

想請問一下,如果用JAVA來寫!
要怎麼寫呢?
2010-03-23 18:46:35
Java版請參考:http://blog.ring.idv.tw/comment.ser?i=315
2010-03-23 19:10:38
你是用ActionScript寫的?
和我們用的程式不相容,我們是用JAVA GEL 。
請問你可以建議我們使用哪種JAVA的程式,好用又入門!
2010-03-25 13:08:10
Java程式??@@"
Java IDE嗎?我都用Eclipse...
2010-03-25 16:29:35
未想過也有人用flash 來寫邊緣偵測呀,以前找了很久也只有用其它程式寫的
2013-01-20 08:53:07