作者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
→ toki:改成 ((int)((7.0 / 16.0) * qerror + a[i,j+1])); 10/02 08:33
→ toki:試試看,另外影像處理要注意 <0 和 >255 的檢查 10/02 08:33
→ toki:少一行,有除法的地方請檢查, 7/16 用int算會直接變 0 10/02 08:34
→ insjoy:我改了~然後有output出數值來~真的跟原本的數值不一樣.. 10/02 09:34
→ insjoy:原本的真的變零!!!!XD"..可是改完以後..輸出還是一樣..沒 10/02 09:35
→ insjoy:有變......Orz........ 10/02 09:35
→ insjoy:所以最主要的問題應該不是在這裡耶....:'( 10/02 09:35
→ insjoy:還有那個..你說少一行..是哪裡少阿@@?! 10/02 09:42