---
# System prepended metadata

title: C#影像分析note
tags: [影像分析]

---

# C#影像分析note


## visual studio


## 原圖轉灰階
灰階轉換公式:
$(R * 313524 + G * 615514 + B * 119538) >> 20$
or
$(R*30 + G*59 + B*11 + 50) / 100$
```csharp=
private void button2_Click(object sender, EventArgs e)
{
    Bitmap im0 = new Bitmap(pictureBox1.Image);
    int W = im0.Width, H = im0.Height;
    Bitmap imgary = new Bitmap(W, H);            
    for (int y = 0; y < H; y++)
    {
        for (int x = 0; x < W; x++)
        {
            Color p0 = im0.GetPixel(x, y);
            int R = p0.R, G = p0.G, B = p0.B;
            int gary = (R * 313524 + G * 615514 + B * 119538) >> 20;
            Color p1 = Color.FromArgb(gary, gary, gary);
            imgary.SetPixel(x, y, p1);
        }
    }
    imgary.Save("Gary.png");
    pictureBox2.Image = imgary;
    pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
}
```
## 灰階轉二值圖

### 二值化:
圖像二值化做的事情為將圖片每個像素點的灰階值設為0或255，讓每個像素不是全白就是全黑。以便分析輪廓。

最常採用的方法為**閥值法**，像素大於閥值就全黑，反之全黑

可分為全局閥值和局部閥值。

#### 全局閥值

對整個圖像中的每個像素用相同的閥值，
優點: 速度較快
缺點: 遇到光照不平均...會出現一大片黑色區域

1.平均灰度值法 : 以圖像中所有像素灰度值的平均作為閥值。
```csharp=
private void button3_Click_1(object sender, EventArgs e)
{
    Bitmap imgary = new Bitmap(pictureBox2.Image);
    int W = imgary.Width,H = imgary.Height;
    Bitmap imbinary = new Bitmap(W, H);
    int average = 0;
    for(int y = 0; y < H; y++)
    {
        for(int x = 0; x < W; x++)
        {
            Color color = imgary.GetPixel(x, y);
            average += color.B;
        }
    }
    average = (int)average / (W * H);
    for (int y = 0; y < H; y++)
    {
        for (int x = 0; x < W; x++)
        {
            Color color = imgary.GetPixel(x, y);
            int v = 255 - color.B;
            Color nowcolor = (v > average ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255, 255, 255));
            imbinary.SetPixel(x, y, nowcolor);
        }
    }
    pictureBox3.Image = imbinary;
    pictureBox3.SizeMode = PictureBoxSizeMode.Zoom;
}
```

2.大津法
把圖像直方圖用某一灰階值分割成兩類，分別計算這兩類的像素點數和灰階平均值，並計算他們的類間方差，當被分割成的兩類類間方差最大時，此灰度值就作爲圖像二值化處理的閾值。


#### 局部閥值

也可稱自適應閥值，局部閾值法假定圖像在一定區域內受到的光照比較接近。它用一個滑窗掃描圖像，並取滑窗中心點亮度與滑窗內其他區域（稱為鄰域, neighborhood area）的亮度進行比較。如果中心點亮度高於鄰域亮度，則將中心點標記為白色，否則標記為黑色。

優點: 可解決光照不平均問題
缺點: 速度較慢

---
### 參考資料:
https://zhuanlan.zhihu.com/p/360824614
http://hk.noobyard.com/article/p-wteozwxj-ov.html


###### tags: `影像分析`