作者insjoy (小橘)
看板C_Sharp
标题[问题] 半色调转换的问题
时间Fri Oct 2 02:22:15 2009
为什麽我的程式跑出来的结果只是二值化的结果
我用的是error diffusion阿~~
我有把阵列的值印出来看过
看起来都没有错阿
可以救救我阿~~!!!!!!!!!!
我现在要把灰阶转成半色调
用的是error diffusion这个方法
他的矩阵是 __ __
1 | |
____ | x 7 |
16 |3 5 1 |
|_ _|
步骤一:假设影像A,取127做门槛值,先选A坐左上角的PIXEL值转换
<127的变成O,>127的变成255。
步骤二:x为步骤一所处理的pixel值A[0,0],由右到左,上到下计算。
EX:
__ __
| 150 130 120|
| 150 100 70|
| 140 100 90|
- -
|| 步骤一转换成255
ˇ
__ __
| 255 130 120|
| 150 100 70|
| 140 100 90|
- -
||
ˇ
__ __
| 255 85 120|
| 117 93 70|
| 140 100 90|
- -
1.右边:130+7/16(150-255)=85
2.左下:没有
3.下面:150+5/16(150-255)=117
4.右下:100+1/16(150-255)=93
然後又从85变成0
继续做步骤二
现在我的程式跑出来的结果是
http://www.wretch.cc/album/show.php?i=insjoy&b=9&f=1187142617&p=0
但是我要的结果应该类似於
http://www.wretch.cc/album/show.php?i=insjoy&b=9&f=1187142618&p=1
这样~"~!!
我的程式码为
Bitmap binarybmp =(Bitmap)pictureBox1.Image;
int[] arr = new int[binarybmp.Height * binarybmp.Width];//存每个pixel颜色
int[,] a = new int[binarybmp.Height , binarybmp.Width];
int[,] b = new int[binarybmp.Height , binarybmp.Width];
int qerror = 0;
for (int i = 0; i < binarybmp.Height; i++)
{
for (int j = 0; j < binarybmp.Width; j++)
{
a[i, j] = binarybmp.GetPixel(j, i).R;
if (a[i,j] < 127)
{
b[i, j] = 0;
}
else
{
b[i, j] = 255;
}
qerror = a[i,j] - b[i,j];
if (j < (binarybmp.Width-1))
{
a[i,j+1] = ((int)(7 / 16) * qerror + a[i,j+1]);
}
if (i< (binarybmp.Height-1) && j>= 1)
{
a[i + 1, j - 1] = a[i + 1, j - 1] + (int)(3 / 16 * qerror);
a[i + 1, j] = a[i + 1, j] + (int)(5 / 16 * qerror);
}
if (j < (binarybmp.Width-1) && i< (binarybmp.Height-1))
{
a[i+1,j+1] = a[i+1,j+1] + (int)(1 / 16 * qerror);
}
if (b[i, j] == 255)
{ binarybmp.SetPixel(j, i, Color.White); }
else
{ binarybmp.SetPixel(j, i, Color.Black); }
}
}
pictureBox1.Image = binarybmp;
}
拜托教我一下阿>"<
谢谢~!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.194.189
1F:→ toki:改成 ((int)((7.0 / 16.0) * qerror + a[i,j+1])); 10/02 08:33
2F:→ toki:试试看,另外影像处理要注意 <0 和 >255 的检查 10/02 08:33
3F:→ toki:少一行,有除法的地方请检查, 7/16 用int算会直接变 0 10/02 08:34
4F:→ insjoy:我改了~然後有output出数值来~真的跟原本的数值不一样.. 10/02 09:34
5F:→ insjoy:原本的真的变零!!!!XD"..可是改完以後..输出还是一样..没 10/02 09:35
6F:→ insjoy:有变......Orz........ 10/02 09:35
7F:→ insjoy:所以最主要的问题应该不是在这里耶....:'( 10/02 09:35
8F:→ insjoy:还有那个..你说少一行..是哪里少阿@@?! 10/02 09:42