Win8Metro(C#)数字图像处理--2.40二值图像轮廓提取

http://dongtingyueh.blog.163.com/blog/static/4619453201271481335630/

[函数名称]

二值图像轮廓提取         ContourExtraction(WriteableBitmap src)

[算法说明]

二值图像的轮廓提取对于图像识别,图像分割有着重要意义。该算法的核心就是将图像目标的内部点消除。所谓内部点,我们要根据当前像素点的邻域来进行判断,假设邻域窗口为3*3窗口,如果当前像素P(x,y)的八个邻域像素满足如下条件,则该点即内部点:

1,P(x,y)为目标像素,假设目标像素为黑色0,背景像素为白色255,那么P(x,y)=0;

2,P(x,y)的八个邻域像素均为目标像素0;

我们把满足条件的内部点删除,换为背景点255,即可得到图像轮廓。

内部点如下图所示:

[函数代码]

/// <summary>

/// Contour Extraction process.

/// </summary>

/// <param name="src">The source image.</param>

/// <returns></returns>

public static WriteableBitmap ContourExtraction(WriteableBitmap src)

{

if (src != null)

{

int w = src.PixelWidth;

int h = src.PixelHeight;

WriteableBitmap dilationImage = new WriteableBitmap(w, h);

byte[] temp = src.PixelBuffer.ToArray();

byte[] tempMask = (byte[])temp.Clone();

for (int j = 1; j < h-1; j++)

{

for (int i = 4; i < w*4-4; i+=4)

{

if ((tempMask[i + j * w * 4] == 0) && (tempMask[i - 4 + j * w * 4] == 0) && (tempMask[i + 4 + j * w * 4] == 0) && (tempMask[i - 4 + (j - 1) * w * 4] == 0)

&& (tempMask[i - 4 + (j + 1) * w * 4] == 0) && (tempMask[i + (j - 1) * w * 4] == 0) && (tempMask[i + (j + 1) * w * 4] == 0)

&& (tempMask[i + 4 + (j - 1) * w * 4] == 0) && (tempMask[i + 4 + (j + 1) * w * 4] == 0))

{

temp[i + j * w * 4] = (byte)255;

temp[i + 1 + j * w * 4] = (byte)255;

temp[i + 2 + j * w * 4] = (byte)255;

}

}

}

Stream sTemp = dilationImage.PixelBuffer.AsStream();

sTemp.Seek(0, SeekOrigin.Begin);

sTemp.Write(temp, 0, w * 4 * h);

return dilationImage;

}

else

{

return null;

}

}

[图像效果]

                                         

时间: 2024-08-06 11:55:51

Win8Metro(C#)数字图像处理--2.40二值图像轮廓提取的相关文章

数字图像处理作业使用OpenCV - 块提取

今天要记录的是树图第二次作业的第二题,Image Patch Extraction.这个概念真的不难懂,但是如果要我实际写的话,还真的不知道要怎么去遍历图像矩阵来提取块.在此要多谢邓大神的热心帮助,告诉了我一个遍历的思路_(:з」∠)_ 一开始我是从原图像矩阵来考虑循环的,也就是两层循环的边界分别是原图像的width和height.这样思考的话,我完全不知道应该如何移动这个patch. 之后思考了从得到的patch列表来考虑,也就两侧循环的边界分别是W-w+1和H-h+1(W是原图像的width

【数字图像处理之(三)】用图像增强谈灰度变换

前面已经说了,数字图像处理是指通过计算机对数字图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术. 其主要目的有三个方面: 提高图像的视感质量,如进行图像的亮度.彩色变换,增强.抑制某些成分,对图像进行几何变换等,以改善图像的质量. 图像数据的变换.编码和压缩,以便于图像的存储和传输. 提取图像中所包含的某些特征或特殊信息,这些被提取的特征或信息往往为计算机分析图像提供便利.提取特征或信息的过程是模式识别或计算机视觉的预处理.提取的特征可以包括很多方面,如频域特征.灰度或颜色特征.边

哈工大深研院数字图像处理第二次大作业:水果自动识别(2)HSV空间聚类及SIFT算法目标识别

老规矩,直接贴报告~ Programe list: Programe was developed in the condition of Windows aswell as Linux server, programming language is Matlab (www.mathworks.com). Classify.m, Kmeans.m: function for K-means clustering. main_Kmeans.m: main function for K-means c

《数字图像处理原理与实践(MATLAB版)》一书之代码Part9

本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part9,辑录该书第431至第438页之代码,供有需要读者下载研究使用.至此全书代码发布已经接近尾声,希望这些源码能够对有需要的读者有所帮助.代码执行结果请参见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MATLAB版)>一书代码发布的说明 http://blog.csdn.net/baimafujinji/article/details/40987807 首先给出的是原书P438所列之程序源

OpenCV-跟我一起学数字图像处理之直方图均衡化

从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致图像的层次不够分明,直方图均衡化就是为了让图像的灰度分布更均匀,图像的层次感更强. 数学原理 基于连续灰度分布的结论推导 直方图均衡化属于数字图像处理中灰度变换(intensity transformation)的内容,灰度变换的目的就是找到一个合适的映射函数s=T(r).将原图像的灰度值映射到新的

数字图像处理 简单介绍

 数字图像处理发展概况 数字图像处理发展概况数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们開始利用计算机来处理图形和图像信息.数字图像处理作为一门学科大约形成于20世纪60年代初期.早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的.图像处理中,输入的是质量低的图像,输出的是改善质量后的图像

【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换.灰度非线性变换.图像阈值化处理.图像均衡化处理等知识,并结合前一篇论文灰度直方图进行展示 .同一时候文章比較具体基础,希望该篇文章对你有所帮助,尤其是刚開始学习的人和学习图像处理的学生. [数字图像处理]一.MFC具体解释显示BMP格式图片 [数字图像处理]二.MFC单文档切割窗体显示图片 [数字图像处理]

【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形旋转.图像反转倒置镜像和图像缩放的知识.同时文章比较详细基础,没有采用GDI+获取矩阵,而是通过读取BMP图片信息头和矩阵像素实现变换,希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处

【数字图像处理之(二)】图像的分类

在计算机中,按照颜色和灰度的多少可以将图像分为灰度图像.二值图像.索引图像和RGB图像四种基本类型.在计算机中,通常是以数组(或矩阵)的形式储存图像的. 灰度图像: 灰度图像矩阵元素的取值范围通常为[0,255].因此其数据类型一般为8位无符号整数的[uint8],这就是人们经常提到的256灰度图像."0"表示纯黑色,"255"表示纯白色,中间的数字从小到大表示由黑到白的过渡色. 然而,在某些领域(例如医学成像),要求提供超出[uint8]的动态范围:会采用[uin