作者willy01 (汪洋中的一条狗)
看板C_Sharp
标题[问题] 图片sobel
时间Tue Dec 22 02:48:13 2009
这个
我打sobel出点问题
但我确定我遮罩应该没问题
我做出的图:
http://www.wretch.cc/album/album.php?id=willydog029&book=5&page=1
做出的图 和正确的sobel出入很多
希望有大大帮我看一下code
============================================================================
private void 边线边缘sobelToolStripMenuItem_Click(object sender, EventArgs e)
{
//定义变数 阵列
Bitmap sobel = new Bitmap(curBitmap);
int [,] arr_r;
int [,] arr_g;
int [,] arr_b;
byte[,] temp_array;
arr_r = new int[sobel.Width, sobel.Height];
arr_g = new int[sobel.Width, sobel.Height];
arr_b = new int[sobel.Width, sobel.Height];
temp_array=new byte[sobel.Width, sobel.Height];
//计算Gx 和Gy
double x;
double y;
double grad;
for (int i = 1; i < (sobel.Width-1); i++)
{
for (int j = 1; j < (sobel.Height-1); j++)
{
arr_r[i, j] = sobel.GetPixel(i, j).R;
arr_g[i, j] = sobel.GetPixel(i, j).G;
arr_b[i, j] = sobel.GetPixel(i, j).B;
//先灰阶化
arr_r[i, j] =(arr_r[i,j]+arr_g[i,j]+arr_b[i,j])/3;
//sobel的Gx能阶
//1 0 -1
//2 0 -2
//1 0 -1
x=System.Math.Abs(1*arr_r[i-1,j-1]+2*arr_r[i-1,j] + 1*arr_r[i-1,j+1]
- arr_r[i+1, j-1] - 2 * arr_r[i+1, j] - arr_r[i + 1, j + 1]);
//sobel的Gy
//1 2 1
//0 0 0
//-1 -2 -1
y=System.Math.Abs(1*arr_r[i-1,j-1]+2*arr_r[i,j-1]+1*arr_r[i+1,j-1]
-1*arr_r[i-1,j+1]-2*arr_r[i,j+1]-1*arr_r[i+1,j+1]);
grad = System.Math.Sqrt(x*x+y*y);
temp_array[i, j] =(byte)(grad);
sobel.SetPixel(i,j,Color.FromArgb(temp_array[i, j],temp_array[i, j],
temp_array[i,j]));
}
}
}
=============================================================================
希望有大大可以帮我看一下code
我知道看别人code很累~~所以我是有先查过资料的
还有我想应该不是没做2值化才不一样
希望有大大可帮忙修CODE
真的希望可以学好程式......THX
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.118.131