2016年2月22日 星期一

影像處理(二值化、侵蝕、擴張)

成果


程式碼

&ltWindow x:Class="Eroding_and_Dilating.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Eroding_and_Dilating"
        mc:Ignorable="d"
        Title="MainWindow" Height="562" Width="1247"&gt
    &ltGrid&gt
        &ltGrid.RowDefinitions&gt
            &ltRowDefinition Height="50" /&gt
            &ltRowDefinition Height="*" /&gt
        &lt/Grid.RowDefinitions&gt
        &ltGrid.ColumnDefinitions&gt
            &ltColumnDefinition Width="*" /&gt
            &ltColumnDefinition Width="*" /&gt
            &ltColumnDefinition Width="*" /&gt
        &lt/Grid.ColumnDefinitions&gt
        &ltLabel Content="二值化" Grid.Row="0" Grid.Column="0" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" /&gt
        &ltLabel Content="侵蝕" Grid.Row="0" Grid.Column="1" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" /&gt
        &ltLabel Content="擴張" Grid.Row="0" Grid.Column="2" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center" /&gt
        &ltImage x:Name="img_threshold" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top"/&gt
        &ltImage x:Name="img_erode" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top"/&gt
        &ltImage x:Name="img_dilate" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" VerticalAlignment="Top"/&gt
    &lt/Grid&gt
&lt/Window&gt

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Emgu.CV;
using Emgu.CV.Structure;
using System.Drawing;
using System.IO;

namespace Eroding_and_Dilating
{
    /// &ltsummary&gt
    /// MainWindow.xaml 的互動邏輯
    /// &lt/summary&gt
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //使用DirectoryInfo類別初始化,並傳入專案執行檔所在目錄
            DirectoryInfo dir = new DirectoryInfo(Directory.GetCurrentDirectory());
            //Parent:移動至上層目錄
            string path = dir.Parent.Parent.Parent.FullName + @"\j.png";

            //載入灰階的原圖
            Image&ltGray, Byte&gt grayImage = new Image&ltGray, byte&gt(path);

            //二值化,閥值設定為『灰階的平均值』
            Gray grayAge = grayImage.GetAverage();
            Image&ltGray, Byte&gt thresholdImage = grayImage.ThresholdBinary(grayAge, new Gray(255));
            img_threshold.Source = Emgu.CV.WPF.BitmapSourceConvert.ToBitmapSource(thresholdImage);

            //侵蝕Erode,迭代2次侵蝕
            Image&ltGray, Byte&gt erodeImage = thresholdImage.Erode(2);
            img_erode.Source = Emgu.CV.WPF.BitmapSourceConvert.ToBitmapSource(erodeImage);

            //擴張Dilate,迭代2次擴張
            Image&ltGray, Byte&gt dilateImage = thresholdImage.Dilate(2);
            img_dilate.Source = Emgu.CV.WPF.BitmapSourceConvert.ToBitmapSource(dilateImage);
        }
    }
}

沒有留言:

張貼留言