数字图像处理经典照片下载 [问题点数:0分]

Bbs1
本版专家分:0
结帖率 0%
数字图像处理经典图像(灰度、彩色)
<em>数字图像处理</em><em>经典</em>图像集,内含各种<em>经典</em>灰度图,彩色图
数字图像处理经典图集(全)
<em>数字图像处理</em>中常用到图片集,适合数字图像开发人员使用,比较全
数字图像处理》 冈萨雷斯版本的 经典图片
一些需要用到的<em>经典</em>的图片素材,希望对大家有帮助。来自冈萨雷斯版本的<em>数字图像处理</em>教材中
数字图像处理经典对比度增强算法
关于图像增强必须清楚的基本概念 1.图像增强的目的: 1)改善图像的视觉效果, 2)转换为更适合于人或机器分析处理的形式 3)突出对人或机器分析有意义的信息 4)抑制无用信息,提高图像的使用价值 5)增强后的图像并不一定保真 2,图像增强的方法分类: 1)从处理对象分类:灰度图像,(伪)彩色图像 2)从处理策略分类:全局处理,局部处理(ROI
6本值得收藏的数字图像处理书籍!
在这个看脸的时代,颜值就是一切。怎样可以成为控制颜值的“黑魔法师”?相信,阅读以下这些<em>经典</em>的图像处理书籍能够助你一臂之力。赶紧紧随大圣众包威客平台的脚步吧! 《<em>数字图像处理</em>基础》   随着台式计算机的处理能力日益增强,各种图像拍摄的设备(例如平板电脑、手机摄像头、数码相机、扫描仪等)的普及,以及互联网的加持,使得<em>数字图像处理</em>变得与文字处理一样普及。本书就数字
数字图像处理中常用到图片集
<em>数字图像处理</em>中常用到图片集,适合数字图像开发人员使用
数字图像处理入门之惊艳照片Lena雷娜图背后的故事
目录nn概念性的东西nn标准测试图像Standard Test Imagenn雷娜图-莱娜图-(Lenna)nn敲黑板看重点nn书上的图nn书下的图nn大佬给出的原因nnWilliam K. Pratt博士nnDavid C. Munsonnn巧合nn争议nn参考文献nn概念性的东西nn标准测试图像Standard Test Imagenn为了直观地测试图像处理算法在“自然图像”上的效果,在图像处...
数字图像处理常用图片库
包括常用的<em>数字图像处理</em>的标准测试图,包括lena,cameraman等等<em>经典</em>图片
数字图像处理领域的二十四个典型算法
转自:http://blog.csdn.net/v_JULY_v/article/details/6210124 作者:July   二零一一年二月二十六日。 参考:百度百科、维基百科、vc<em>数字图像处理</em>。 -------------------------------------------------- <em>数字图像处理</em>领域的二十四个典型算法及vc实现、第一章 一、256色转灰
数字图像处理经典照片
<em>数字图像处理</em>课程设计、毕业设计、实验、应用中<em>经典</em>要用到一些<em>照片</em>,这里是课本上出现过的<em>经典</em><em>照片</em>!
数字图像处理图片
<em>数字图像处理</em><em>经典</em>图片
图像处理经典原图lina特征sift匹配图
图像处理<em>经典</em>的素材集合,原图lena;特征匹配图
数字图像处理(冈萨雷斯)书本全部完整原图片库
<em>数字图像处理</em>(冈萨雷斯)书本全部完整原图片库
数字图像处理图片集256彩色图像
<em>数字图像处理</em>需要的最简单图片<em>数字图像处理</em>需要的最简单图片。
数字图像处理图片素材
图像处理学习者和研究者使用的图像素材,标准库
数字图像处理常用图片BMP
<em>数字图像处理</em>常用图片BMP
数字图像处理示例图片集合
《冈萨雷斯数字信号处理》一书中所用的示例图片集合
Lena图像处理测试专业用图,高清完整全身原图
Lena图像处理测试专业用图,高清完整全身原图,该图片很好的包含了平坦区域、阴影和纹理等细节,这些都有益于测试各种不同的图像处理算法。它是一幅很好的测试<em>照片</em>!其次,由于这是一个非常有魅力女人的<em>照片</em>。
数字图像处理(第三版)配套图片集
里面包含了完整的,学习<em>数字图像处理</em>常用的<em>经典</em>的图片, 为了帮助大家节省时间,整理并打包了 <>冈萨雷斯 第三版的配套书籍的图片资源
数字图像处理标准测试图片(335张)
基本包括了所有出现于各种<em>数字图像处理</em>教材、论文的标准测试图片,共335张,classic,oldclassic,aerials,misc,sequences,textures,Kodak,special,additional,Public-Domain Test Images for Homeworks and Projects,Photos with lines & edges,Bright colours photos……
数字图像处理(MATLAB版)(英文版)(冈萨雷斯数字图像处理经典教材的配套MATLAB实现)
Digital Image Processing Using MATLAB 个人感觉这份pdf质量超好 送给有需要的人吧 请大家支持支持正版
数字图像处理中常用的灰度图像集锦
包含了<em>数字图像处理</em>中经常用到的灰度图像,以及代码运行后的对比图
数字图像处理(第三版)图片素材
<em>数字图像处理</em>(第三版), RC.G RE.W , 电子工业出版社,图片素材
数字图像处理图片素材库
<em>数字图像处理</em>图片库,比如lenna和拍照的男人等<em>经典</em>图片素材
数字图像处理经典测试图片全集
<em>数字图像处理</em>常用的标准测试图片包含lenna barbara baboon pepper等<em>经典</em>图片.全部无压缩bmp格式
数字图像处理 实验1
实验一nn思考题题目: n4.1 利用matlab对数变换实现个人<em>照片</em>的频谱图像的显示,并与原频谱进行对比。 n4.2 利用matlab编程实现图像直方图均衡化算法。 n4.2 利用matlab编程实现基于线性空间滤波的低通滤波器。nn思考题1:nn选取实验二中的图,可以随意,注意图片应该同新建的脚本文件在同一个文件夹内,图片格式不限,jpg,bmp等图片格式都可以。 n n左图为实验2原图,右图...
数字图像处理视频教程
<em>数字图像处理</em>视频教程,韩春梅主讲的,适合刚入门的初学者。
图像处理的书籍推荐
<em>数字图像处理</em>                            冈萨雷斯rn<em>数字图像处理</em>(matlab版)     冈萨雷斯rn图像处理 matlab版本的比非matlab 的好看懂一些,非matlab的理论性比较强。rn冈萨雷斯的matlab版本,上面的都是基础算法,可能有点过时,但是是<em>数字图像处理</em>的基础,所以还是要掌握的rn然后 学习opencv 都是老外的书 这边书上的算法相比要前沿点
冈萨雷斯数字图像处理MATLAB版图片素材及对应matlab程序
冈萨雷斯<em>数字图像处理</em>MATLAB版图片素材及对应matlab程序
数字图像处理 冈萨雷斯版 书中的图片
《<em>数字图像处理</em>》 冈萨雷斯版本的书中的图片,图片格式是gif的。希望对从事<em>数字图像处理</em>的人有帮助。图片已经根据章节分类好了。
数字图像处理看过的书
特征提取与选择:特征提取实质就是从D个特征中选择出d个(drn模式分类及识别:最小错误率的贝叶斯决策,感知器分离器,近邻分离器(最近邻,k-近邻)。rn<em>经典</em>模式识别决策方法及实现rn人工神经网络、隐马尔可夫模型、决策树、支持向量机SVM、模板匹配rn rn目标识别过程主要包括:目标证实、目标检测、目标鉴别及目标识别。其中,目标证实是判断图像中指定区域是否为目标,目标检测是定位目标的准确位置,目标鉴
数字图像处理经典论文参考文献
本资源大概涵盖了60篇关于<em>数字图像处理</em>的国内外论文,是我根据自己所做“国家自然基金”关于<em>数字图像处理</em>参考文献逐一<em>下载</em>并且整理的,希望能够对大家有所帮助。
冈萨雷斯:数字图像处理(一):第一章绪论
一、图像处理基本步骤nn图片来源:<em>数字图像处理</em> 第三版 冈萨雷斯n1.图像获取与给出一幅数字形式的图像一样简单。通常,图像获取截断包括图像预处理,譬如图像缩放n2.图像增强是对一幅图像进行某种擦欧洲哦,使其结果在特定应用汇总比原始图像更适合进行处理。n3.图像复原也是改进图像外观的一个处理领域。然而,与图像增强不同,图像增强是主观的,而图像复原是客观的;从某种意义上说,复原技术倾向于以图像退化的数...
数字图像处理标准测试图像【附lena全身像原图】
<em>数字图像处理</em>标准测试图像【有彩色,有灰度,附lena全身像原图】
冈萨雷斯数字图像处理matlab版所有图片和源码上(1-5章
资源太大 打包分两部分了 源码在下半部分
数字图像处理之图像复原
一、图像复原与图像增强的区别图像的增强是一个主观的过程,其目的是改善图片的质量,对感兴趣的部分加以增强,对不感兴趣的部分予以抑制。而图像复原是一个客观的过程,针对质量降低或失真的图像,试图恢复其原始的内容或质量。复原技术是面向退化模型的,并且采用相反的过程进行处理,以便恢复出原图像。在进行图像复原之前要先建立起其退化模型,根据该模型进行图像复原。课本中的图像退化过程建模为一个退化函数和一个加性噪声...
数字图像处理数据集(二)-CBSD68
<em>数字图像处理</em>常用数据集CBSD68,68张彩色图,大小不一。 预览:https://blog.csdn.net/iteapoy/article/details/86062640
经典数字图像处理(matlab 实现)
Ivan Selesnick(Software)
数字图像处理知识点总结
常用滤波器:nn中值滤波器:它能滤除椒盐噪声、高斯噪声,并且相对于均值滤波器来说,他不仅能过滤噪声而且不会模糊边界,保护了图像尖锐的边缘。nn均值滤波:平滑图像,速度较快,算法简单,只能很小程度的削弱噪声,不能消除噪声。缺点是会模糊图像细节。nn高斯滤波器:对于抑制服从正态分布的噪声非常有效。nn拉普拉斯滤波器:可以增强图像细节,找到图像边缘。nn梯度算子锐化滤波器:soble  算子、Rober...
数字图像处理——月亮图像的识别与裁剪
已知一张带有月亮的图片(左),截取只有月亮的区域(右),效果如图:nn预备知识:nfind函数作用:n如图运行结果所示,a是一个二维矩阵,find函数作用是找到矩阵中所有不为零的点的坐标。坐标编号是从最左边一列开始,从上到下依次为1,2,3。。。换列时数字继续累加。nn方法一:find法nnimg=imread('moon.png');%读取moon图像nW=im2bw(img);%把moon图像...
lena全身经典图像识图图
图像相关课程中经常出现的lena<em>经典</em>原图,全身,不是256哦
2013年数字图像处理期末考试试题
2013年<em>数字图像处理</em> 期末考试附带答案,看懂,就能轻松应付考试了。
冈萨雷斯数字图像处理开篇
开篇冈萨雷斯版的<em>数字图像处理</em>可谓<em>经典</em>之作,其在撰写时倾注了大量的心血,使我们读起来如饮美酒,令人陶醉。这里感谢冈萨雷斯及其相关从业人员和翻译工作者辛勤的耕耘。接下来我会对该书的部分内容进行讲解和Matlab实现。下面是这本书的相关源代码和图片资料。网上可以直接免费获取,不必通过积分获取。源代码:http://fourier.eng.hmc.edu/e161/dipum/图像:http://imag...
数字图像处理算法例子
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace edge { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void open_Click(object sender, EventArgs e) { OpenFileDialog opnDlg = new OpenFileDialog(); opnDlg.Filter = "所有图像文件 | *.bmp; *.pcx; *.png; *.jpg; *.gif;" + "*.tif; *.ico; *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf|" + "位图( *.bmp; *.jpg; *.png;...) | *.bmp; *.pcx; *.png; *.jpg; *.gif; *.tif; *.ico|" + "矢量图( *.wmf; *.eps; *.emf;...) | *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf"; opnDlg.Title = "打开图像文件"; opnDlg.ShowHelp = true; if (opnDlg.ShowDialog() == DialogResult.OK) { curFileName = opnDlg.FileName; try { curBitmap = (Bitmap)Image.FromFile&#40;curFileName&#41;; } catch (Exception exp) { MessageBox.Show(exp.Message); } } Invalidate(); } private void close_Click(object sender, EventArgs e) { this.Close(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; if (curBitmap != null) { g.DrawImage(curBitmap, 160, 20, curBitmap.Width, curBitmap.Height); } } private void mask_Click(object sender, EventArgs e) { if (curBitmap != null) { mask operatorMask = new mask(); if (operatorMask.ShowDialog() == DialogResult.OK) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height); System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = curBitmap.Width * curBitmap.Height; byte[] grayValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes); int thresholding = operatorMask.GetThresholding; byte flagMask = operatorMask.GetMask; double[] tempArray = new double[bytes]; double gradX, gradY, grad; switch (flagMask) { case 0://Roberts for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { gradX = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - grayValues[i * curBitmap.Width + j]; gradY = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)]; grad = Math.Sqrt(gradX * gradX + gradY * gradY); tempArray[i * curBitmap.Width + j] = grad; } } break; case 1://Prewitt for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { gradX = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] - grayValues[i * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)]; gradY = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] + grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; grad = Math.Sqrt(gradX * gradX + gradY * gradY); tempArray[i * curBitmap.Width + j] = grad; } } break; case 2://Sobel for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { gradX = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 2 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 2 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)]; gradY = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 2 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 2 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; grad = Math.Sqrt(gradX * gradX + gradY * gradY); tempArray[i * curBitmap.Width + j] = grad; } } break; case 3://Laplacian1公式(8.4) for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { grad = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - 4 * grayValues[i * curBitmap.Width + j]; tempArray[i * curBitmap.Width + j] = grad; } } break; case 4://Laplacian2公式(8.5) for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { grad = grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] + grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 8 * grayValues[i * curBitmap.Width + j]; tempArray[i * curBitmap.Width + j] = grad; } } break; case 5://Laplacian3公式(8.6) for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { grad = -1 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 2 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 2 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 2 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 2 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 4 * grayValues[i * curBitmap.Width + j]; tempArray[i * curBitmap.Width + j] = grad; } } break; case 6://Kirsch for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { grad = 0; gradX = -5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 5 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 5 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - 5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - 5 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - 5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = -5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - 5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; gradX = -5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 5 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - 5 * grayValues[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + j] + 3 * grayValues[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; if (gradX > grad) grad = gradX; tempArray[i * curBitmap.Width + j] = grad; } } break; default: MessageBox.Show("无效!"); break; } if (thresholding == 0)//不进行阈值处理 { for (int i = 0; i < bytes; i++) { if (tempArray[i] < 0) grayValues[i] = 0; else { if (tempArray[i] > 255) grayValues[i] = 255; else grayValues[i] = Convert.ToByte(tempArray[i]); } } } else//阈值处理,生成二值边缘图像 { if (flagMask == 3 || flagMask == 4 || flagMask == 5) { zerocross(ref tempArray, out grayValues, thresholding); } else { for (int i = 0; i < bytes; i++) { if (tempArray[i] > thresholding) grayValues[i] = 255; else grayValues[i] = 0; } } } System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes); curBitmap.UnlockBits(bmpData); } Invalidate(); } } private void gaussian_Click(object sender, EventArgs e) { if (curBitmap != null) { gaussian gaussFilter = new gaussian(); if (gaussFilter.ShowDialog() == DialogResult.OK) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height); System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = curBitmap.Width * curBitmap.Height; byte[] grayValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes); double thresholding = gaussFilter.GetThresholding; double sigma = gaussFilter.GetSigma; bool flag = gaussFilter.GetFlag; double[] filt, tempArray; createFilter(out filt, sigma, flag); conv2(ref grayValues, ref filt, out tempArray); zerocross(ref tempArray, out grayValues, thresholding); System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes); curBitmap.UnlockBits(bmpData); } Invalidate(); } } private void zerocross(ref double[] inputImage, out byte[] outImage, double thresh) { outImage = new byte[curBitmap.Width * curBitmap.Height]; for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { if (inputImage[i * curBitmap.Width + j] < 0 && inputImage[((i + 1) % curBitmap.Height) * curBitmap.Width + j] > 0 && Math.Abs(inputImage[i * curBitmap.Width + j] - inputImage[((i + 1) % curBitmap.Height) * curBitmap.Width + j]) > thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[i * curBitmap.Width + j] < 0 && inputImage[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] > 0 && Math.Abs(inputImage[i * curBitmap.Width + j] - inputImage[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j]) > thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[i * curBitmap.Width + j] < 0 && inputImage[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] > 0 && Math.Abs(inputImage[i * curBitmap.Width + j] - inputImage[i * curBitmap.Width + ((j + 1) % curBitmap.Width)]) > thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[i * curBitmap.Width + j] < 0 && inputImage[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] > 0 && Math.Abs(inputImage[i * curBitmap.Width + j] - inputImage[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)]) > thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[i * curBitmap.Width + j] == 0) { if (inputImage[((i + 1) % curBitmap.Height) * curBitmap.Width + j] > 0 && inputImage[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] < 0 && Math.Abs(inputImage[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - inputImage[((i + 1) % curBitmap.Height) * curBitmap.Width + j]) > 2 * thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[((i + 1) % curBitmap.Height) * curBitmap.Width + j] < 0 && inputImage[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] > 0 && Math.Abs(inputImage[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] - inputImage[((i + 1) % curBitmap.Height) * curBitmap.Width + j]) > 2 * thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] > 0 && inputImage[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] < 0 && Math.Abs(inputImage[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] - inputImage[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)]) > 2 * thresh) { outImage[i * curBitmap.Width + j] = 255; } else if (inputImage[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] < 0 && inputImage[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] > 0 && Math.Abs(inputImage[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] - inputImage[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)]) > 2 * thresh) { outImage[i * curBitmap.Width + j] = 255; } else { outImage[i * curBitmap.Width + j] = 0; } } else { outImage[i * curBitmap.Width + j] = 0; } } } } private void createFilter(out double[] filter, double sigma, bool lod) { double std2 = 2 * sigma * sigma; int radius = Convert.ToInt16(Math.Ceiling(3 * sigma)); int filterWidth = 2 * radius + 1; filter = new double[filterWidth * filterWidth]; double sum = 0, average = 0; if (lod == false) { for (int i = 0; i < radius; i++) { for (int j = 0; j < radius; j++) { int xx = (j - radius) * (j - radius); int yy = (i - radius) * (i - radius); filter[i * filterWidth + j] = (xx + yy - std2) * Math.Exp(-(xx + yy) / std2); sum += 4 * filter[i * filterWidth + j]; } } for (int i = 0; i < radius; i++) { int xx = (i - radius) * (i - radius); filter[i * filterWidth + radius] = (xx - std2) * Math.Exp(-xx / std2); sum += 2 * filter[i * filterWidth + radius]; } for (int j = 0; j < radius; j++) { int yy = (j - radius) * (j - radius); filter[radius * filterWidth + j] = (yy - std2) * Math.Exp(-yy / std2); sum += 2 * filter[radius * filterWidth + j]; } filter[radius * filterWidth + radius] = -std2; sum += filter[radius * filterWidth + radius]; average = sum / filter.Length; for (int i = 0; i < radius; i++) { for (int j = 0; j < radius; j++) { filter[i * filterWidth + j] = filter[i * filterWidth + j] - average; filter[filterWidth - 1 - j + i * filterWidth] = filter[i * filterWidth + j]; filter[filterWidth - 1 - j + (filterWidth - 1 - i) * filterWidth] = filter[i * filterWidth + j]; filter[j + (filterWidth - 1 - i) * filterWidth] = filter[i * filterWidth + j]; } } for (int i = 0; i < radius; i++) { filter[i * filterWidth + radius] = filter[i * filterWidth + radius] - average; filter[(filterWidth - 1 - i) * filterWidth + radius] = filter[i * filterWidth + radius]; } for (int j = 0; j < radius; j++) { filter[radius * filterWidth + j] = filter[radius * filterWidth + j] - average; filter[radius * filterWidth + filterWidth - 1 - j] = filter[radius * filterWidth + j]; } filter[radius * filterWidth + radius] = filter[radius * filterWidth + radius] - average; } else { for (int i = 0; i < radius; i++) { for (int j = 0; j < radius; j++) { int xx = (j - radius) * (j - radius); int yy = (i - radius) * (i - radius); filter[i * filterWidth + j] = 1.6 * Math.Exp(-(xx + yy) * 1.6 * 1.6 / std2) / sigma - Math.Exp(-(xx + yy) / std2) / sigma; sum += 4 * filter[i * filterWidth + j]; } } for (int i = 0; i < radius; i++) { int xx = (i - radius) * (i - radius); filter[i * filterWidth + radius] = 1.6 * Math.Exp(-xx * 1.6 * 1.6 / std2) / sigma - Math.Exp(-xx / std2) / sigma; sum += 2 * filter[i * filterWidth + radius]; } for (int j = 0; j < radius; j++) { int yy = (j - radius) * (j - radius); filter[radius * filterWidth + j] = 1.6 * Math.Exp(-yy * 1.6 * 1.6 / std2) / sigma - Math.Exp(-yy / std2) / sigma; sum += 2 * filter[radius * filterWidth + j]; } filter[radius * filterWidth + radius] = 1.6 / sigma - 1 / sigma; sum += filter[radius * filterWidth + radius]; average = sum / filter.Length; for (int i = 0; i < radius; i++) { for (int j = 0; j < radius; j++) { filter[i * filterWidth + j] = filter[i * filterWidth + j] - average; filter[filterWidth - 1 - j + i * filterWidth] = filter[i * filterWidth + j]; filter[filterWidth - 1 - j + (filterWidth - 1 - i) * filterWidth] = filter[i * filterWidth + j]; filter[j + (filterWidth - 1 - i) * filterWidth] = filter[i * filterWidth + j]; } } for (int i = 0; i < radius; i++) { filter[i * filterWidth + radius] = filter[i * filterWidth + radius] - average; filter[(filterWidth - 1 - i) * filterWidth + radius] = filter[i * filterWidth + radius]; } for (int j = 0; j < radius; j++) { filter[radius * filterWidth + j] = filter[radius * filterWidth + j] - average; filter[radius * filterWidth + filterWidth - 1 - j] = filter[radius * filterWidth + j]; } filter[radius * filterWidth + radius] = filter[radius * filterWidth + radius] - average; } } private void conv2(ref byte[] inputImage, ref double[] mask, out double[] outImage) { int windWidth = Convert.ToInt16(Math.Sqrt(mask.Length)); int radius = windWidth / 2; double temp; outImage = new double[curBitmap.Width * curBitmap.Height]; for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { temp = 0; for (int x = -radius; x < bytes; i++) tempImage[i] = Convert.ToDouble(grayValues[i]); gaussSmooth(tempImage, out tempArray, sigma); for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { gradX = tempArray[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] + 2 * tempArray[i * curBitmap.Width + ((j + 1) % curBitmap.Width)] + tempArray[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - tempArray[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 2 * tempArray[i * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - tempArray[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)]; gradY = tempArray[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] + 2 * tempArray[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] + tempArray[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] - tempArray[((i + 1) % curBitmap.Height) * curBitmap.Width + ((Math.Abs(j - 1)) % curBitmap.Width)] - 2 * tempArray[((i + 1) % curBitmap.Height) * curBitmap.Width + j] - tempArray[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]; grad[i * curBitmap.Width + j] = Math.Sqrt(gradX * gradX + gradY * gradY); angle = Math.Atan2(gradY, gradX); if ((angle >= -1.178097 && angle < 1.178097) || angle >= 2.748894 || angle < -2.748894) aLabel[i * curBitmap.Width + j] = 0; else if ((angle >= 0.392699 && angle < 1.178097) || (angle >= -2.748894 && angle < -1.963495)) aLabel[i * curBitmap.Width + j] = 1; else if ((angle >= -1.178097 && angle < -0.392699) || (angle >= 1.963495 && angle < 2.748894)) aLabel[i * curBitmap.Width + j] = 2; else aLabel[i * curBitmap.Width + j] = 3; } } for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { switch (aLabel[i * curBitmap.Width + j]) { case 3://水平方向 if (grad[i * curBitmap.Width + j] > grad[((Math.Abs(i - 1))%curBitmap.Height) * curBitmap.Width + j] && grad[i * curBitmap.Width + j] > grad[((i + 1)%curBitmap.Height) * curBitmap.Width + j]) edgeMap[i * curBitmap.Width + j] = grad[i * curBitmap.Width + j]; break; case 2://正45度方向 if (grad[i * curBitmap.Width + j] > grad[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] && grad[i * curBitmap.Width + j] > grad[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]) edgeMap[i * curBitmap.Width + j] = grad[i * curBitmap.Width + j]; break; case 1://负45度方向 if (grad[i * curBitmap.Width + j] > grad[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] && grad[i * curBitmap.Width + j] > grad[((i + 1) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)]) edgeMap[i * curBitmap.Width + j] = grad[i * curBitmap.Width + j]; break; case 0://垂直方向 if (grad[i * curBitmap.Width + j] > grad[i * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] && grad[i * curBitmap.Width + j] > grad[i * curBitmap.Width + ((j + 1) % curBitmap.Width)]) edgeMap[i * curBitmap.Width + j] = grad[i * curBitmap.Width + j]; break; default: return; } } } Array.Clear(grayValues, 0, bytes); for (int i = 0; i < curBitmap.Height; i++) { for (int j =0; j < curBitmap.Width; j++) { if (edgeMap[i * curBitmap.Width + j] > thresholding[0]) { grayValues[i * curBitmap.Width + j] = 255; traceEdge(i, j, edgeMap, ref grayValues, thresholding[1]); } } } System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes); curBitmap.UnlockBits(bmpData); } Invalidate(); } } private void gaussSmooth(double[] inputImage, out double[] outputImage, double sigma) { double std2 = 2 * sigma * sigma; int radius = Convert.ToInt16(Math.Ceiling(3 * sigma)); int filterWidth = 2 * radius + 1; double[] filter = new double[filterWidth]; outputImage = new double[inputImage.Length]; int length = Convert.ToInt16(Math.Sqrt(inputImage.Length)); double[] tempImage = new double[inputImage.Length]; double sum = 0; for (int i = 0; i < filterWidth; i++) { int xx = (i - radius) * (i - radius); filter[i] = Math.Exp(-xx / std2); sum += filter[i]; } for (int i = 0; i < filterWidth; i++) { filter[i] = filter[i] / sum; } for (int i = 0; i < length; i++) { for (int j = 0; j < length; j++) { double temp = 0; for (int k = -radius; k < length; j++) { for (int i = 0; i < length; i++) { double temp = 0; for (int k = -radius; k < 8; p++) { kk = k + kOffset[p]; kk = Math.Abs(kk) % curBitmap.Height; ll = l + lOffset[p]; ll = Math.Abs(ll) % curBitmap.Width; if (outputImage[ll * curBitmap.Width + kk] != 255) { if (inputImage[ll * curBitmap.Width + kk] > thrLow) { outputImage[ll * curBitmap.Width + kk] = 255; traceEdge(ll, kk, inputImage, ref outputImage, thrLow); } } } } private void morph_Click(object sender, EventArgs e) { if (curBitmap != null) { morphologic grayMor = new morphologic(); if (grayMor.ShowDialog() == DialogResult.OK) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height); System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = curBitmap.Width * curBitmap.Height; byte[] grayValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes); byte[] tempArray1 = new byte[bytes]; byte[] tempArray2 = new byte[bytes]; bool flag = grayMor.GetMethod; double thresh = grayMor.GetThresh; byte[] struEle = new byte[25]; struEle = grayMor.GetStruction; int temp; tempArray1 = grayDelation(grayValues, struEle, curBitmap.Height, curBitmap.Width); tempArray2 = grayErode(grayValues, struEle, curBitmap.Height, curBitmap.Width); for (int i = 0; i < bytes; i++) { if (flag == false) temp = (tempArray1[i] - tempArray2[i]) / 2; else temp = (tempArray1[i] + tempArray2[i] - 2 * grayValues[i]) / 2; if (temp > thresh) grayValues[i] = 255; else grayValues[i] = 0; } System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes); curBitmap.UnlockBits(bmpData); } Invalidate(); } } private byte[] grayDelation(byte[] grayImage, byte[] se, int tHeight, int tWidth) { byte[] tempImage = new byte[grayImage.Length]; for (int i = 0; i < tHeight; i++) { for (int j = 0; j < tWidth; j++) { int[] cou = new int[]{grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + (Math.Abs(j - 2)) % tWidth] * se[0], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + (Math.Abs(j - 1)) % tWidth] * se[1], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + j] * se[2], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + ((j + 1) % tWidth)] * se[3], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + ((j + 2) % tWidth)] * se[4], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + (Math.Abs(j - 2) % tWidth)] * se[5], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + (Math.Abs(j - 1) % tWidth)] * se[6], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + j] * se[7], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + ((j + 1) % tWidth)] * se[8], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + ((j + 2) % tWidth)] * se[9], grayImage[i * tWidth + (Math.Abs(j - 2) % tWidth)] * se[10], grayImage[i * tWidth + (Math.Abs(j - 1) % tWidth)] * se[11], grayImage[i * tWidth + j] * se[12], grayImage[i * tWidth + ((j + 1) % tWidth)] * se[13], grayImage[i * tWidth + ((j + 2) % tWidth)] * se[14], grayImage[((i + 1) % tHeight) * tWidth + (Math.Abs(j - 2) % tWidth)] * se[15], grayImage[((i + 1) % tHeight) * tWidth + (Math.Abs(j - 1) % tWidth)] * se[16], grayImage[((i + 1) % tHeight) * tWidth + j] * se[17], grayImage[((i + 1) % tHeight) * tWidth + ((j + 1) % tWidth)] * se[18], grayImage[((i + 1) % tHeight) * tWidth + ((j + 2) % tWidth)] * se[19], grayImage[((i + 2) % tHeight) * tWidth + (Math.Abs(j - 2) % tWidth)] * se[20], grayImage[((i + 2) % tHeight) * tWidth + (Math.Abs(j - 1) % tWidth)] * se[21], grayImage[((i + 2) % tHeight) * tWidth + j] * se[22], grayImage[((i + 2) % tHeight) * tWidth + ((j + 1) % tWidth)] * se[23], grayImage[((i + 2) % tHeight) * tWidth + ((j + 2) % tWidth)] * se[24]}; int maxim = cou[0]; for (int k = 1; k < 25; k++) { if (cou[k] > maxim) { maxim = cou[k]; } } tempImage[i * tWidth + j] = (byte)maxim; } } return tempImage; } private byte[] grayErode(byte[] grayImage, byte[] se, int tHeight, int tWidth) { byte[] tempImage = new byte[grayImage.Length]; byte[] tempSe = new byte[25]; tempSe = (byte[])se.Clone(); for (int k = 0; k < 25; k++) { if (tempSe[k] == 0) tempSe[k] = 255; } for (int i = 0; i < tHeight; i++) { for (int j = 0; j < tWidth; j++) { int[] cou = new int[]{grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + (Math.Abs(j - 2)) % tWidth] * tempSe[0], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + (Math.Abs(j - 1)) % tWidth] * tempSe[1], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + j] * tempSe[2], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + ((j + 1) % tWidth)] * tempSe[3], grayImage[((Math.Abs(i - 2)) % tHeight) * tWidth + ((j + 2) % tWidth)] * tempSe[4], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + (Math.Abs(j - 2) % tWidth)] * tempSe[5], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + (Math.Abs(j - 1) % tWidth)] * tempSe[6], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + j] * tempSe[7], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + ((j + 1) % tWidth)] * tempSe[8], grayImage[((Math.Abs(i - 1)) % tHeight) * tWidth + ((j + 2) % tWidth)] * tempSe[9], grayImage[i * tWidth + (Math.Abs(j - 2) % tWidth)] * tempSe[10], grayImage[i * tWidth + (Math.Abs(j - 1) % tWidth)] * tempSe[11], grayImage[i * tWidth + j] * tempSe[12], grayImage[i * tWidth + ((j + 1) % tWidth)] * tempSe[13], grayImage[i * tWidth + ((j + 2) % tWidth)] * tempSe[14], grayImage[((i + 1) % tHeight) * tWidth + (Math.Abs(j - 2) % tWidth)] * tempSe[15], grayImage[((i + 1) % tHeight) * tWidth + (Math.Abs(j - 1) % tWidth)] * tempSe[16], grayImage[((i + 1) % tHeight) * tWidth + j] * tempSe[17], grayImage[((i + 1) % tHeight) * tWidth + ((j + 1) % tWidth)] * tempSe[18], grayImage[((i + 1) % tHeight) * tWidth + ((j + 2) % tWidth)] * tempSe[19], grayImage[((i + 2) % tHeight) * tWidth + (Math.Abs(j - 2) % tWidth)] * tempSe[20], grayImage[((i + 2) % tHeight) * tWidth + (Math.Abs(j - 1) % tWidth)] * tempSe[21], grayImage[((i + 2) % tHeight) * tWidth + j] * tempSe[22], grayImage[((i + 2) % tHeight) * tWidth + ((j + 1) % tWidth)] * tempSe[23], grayImage[((i + 2) % tHeight) * tWidth + ((j + 2) % tWidth)] * tempSe[24]}; int minimum = cou[0]; for (int k = 1; k < 25; k++) { if (cou[k] < minimum) { minimum = cou[k]; } } tempImage[i * tWidth + j] = (byte)minimum; } } return tempImage; } private void wavelet_Click(object sender, EventArgs e) { if (curBitmap != null) { wvl wavelet = new wvl(); if (wavelet.ShowDialog() == DialogResult.OK) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height); System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = curBitmap.Width * curBitmap.Height; byte[] grayValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes); double[] tempArray1 = new double[bytes]; double[] tempArray2 = new double[bytes]; double[] tempArray3 = new double[bytes]; double[] gradX = new double[bytes]; double[] gradY = new double[bytes]; byte multiscale = wavelet.GetScale; byte[] thresholding = new byte[2]; thresholding = wavelet.GetThresh; for (int i = 0; i < bytes; i++) { tempArray1[i] = Convert.ToDouble(grayValues[i]); } for (int z = 0; z < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { double[] scl = new double[curBitmap.Width]; double[] wvl = new double[curBitmap.Width]; int temp; scl[j] = 0.0; wvl[j] = 0.0; for (int x = -2 - 2 * coff; x < p.Length - 2 - 2 * coff; x++) { temp = (Math.Abs(j + x)) % curBitmap.Width; scl[j] += p[1 + coff - x] * tempArray1[i * curBitmap.Width + temp]; } for (int x = -1 - coff; x < q.Length - 1 - coff; x++) { temp = (Math.Abs(j + x)) % curBitmap.Width; wvl[j] += q[-x] * tempArray1[i * curBitmap.Width + temp]; } tempArray2[i * curBitmap.Width + j] = scl[j]; gradX[i * curBitmap.Width + j] = wvl[j]; } } for (int i = 0; i < curBitmap.Width; i++) { for (int j = 0; j < curBitmap.Height; j++) { double[] scl = new double[curBitmap.Height]; double[] wvl = new double[curBitmap.Height]; int temp; scl[j] = 0.0; wvl[j] = 0.0; for (int x = -2 - 2 * coff; x < p.Length - 2 - 2 * coff; x++) { temp = (Math.Abs(j + x)) % curBitmap.Height; scl[j] += p[1 + coff - x] * tempArray2[temp * curBitmap.Width + i]; } for (int x = -1 - coff; x < q.Length - 1 - coff; x++) { temp = (Math.Abs(j + x)) % curBitmap.Height; wvl[j] += q[-x] * tempArray1[temp * curBitmap.Width + i]; } tempArray3[j * curBitmap.Width + i] = scl[j]; gradY[j * curBitmap.Width + i] = wvl[j]; } } tempArray1 = (double[])tempArray3.Clone(); } double angle; for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { tempArray1[i * curBitmap.Width + j] = Math.Sqrt(gradX[i * curBitmap.Width + j] * gradX[i * curBitmap.Width + j] + gradY[i * curBitmap.Width + j] * gradY[i * curBitmap.Width + j]); angle = Math.Atan2(gradY[i * curBitmap.Width + j], gradX[i * curBitmap.Width + j]); if ((angle >= -1.178097 && angle < 1.178097) || angle >= 2.748894 || angle < -2.748894) tempArray2[i * curBitmap.Width + j] = 0; else if ((angle >= 0.392699 && angle < 1.178097) || (angle >= -2.748894 && angle < -1.963495)) tempArray2[i * curBitmap.Width + j] = 1; else if ((angle >= -1.178097 && angle < -0.392699) || (angle >= 1.963495 && angle < 2.748894)) tempArray2[i * curBitmap.Width + j] = 2; else tempArray2[i * curBitmap.Width + j] = 3; } } Array.Clear(tempArray3, 0, bytes); for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { switch (Convert.ToInt16(tempArray2[i * curBitmap.Width + j])) { case 3://水平方向 if (tempArray1[i * curBitmap.Width + j] > tempArray1[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + j] && tempArray1[i * curBitmap.Width + j] > tempArray1[((i + 1) % curBitmap.Height) * curBitmap.Width + j]) tempArray3[i * curBitmap.Width + j] = tempArray1[i * curBitmap.Width + j]; break; case 1://正45度方向 if (tempArray1[i * curBitmap.Width + j] > tempArray1[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] && tempArray1[i * curBitmap.Width + j] > tempArray1[((i + 1) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)]) tempArray3[i * curBitmap.Width + j] = tempArray1[i * curBitmap.Width + j]; break; case 2://负45度方向 if (tempArray1[i * curBitmap.Width + j] > tempArray1[((Math.Abs(i - 1)) % curBitmap.Height) * curBitmap.Width + ((j + 1) % curBitmap.Width)] && tempArray1[i * curBitmap.Width + j] > tempArray1[((i + 1) % curBitmap.Height) * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)]) tempArray3[i * curBitmap.Width + j] = tempArray1[i * curBitmap.Width + j]; break; case 0://垂直方向 if (tempArray1[i * curBitmap.Width + j] > tempArray1[i * curBitmap.Width + (Math.Abs(j - 1) % curBitmap.Width)] && tempArray1[i * curBitmap.Width + j] > tempArray1[i * curBitmap.Width + ((j + 1) % curBitmap.Width)]) tempArray3[i * curBitmap.Width + j] = tempArray1[i * curBitmap.Width + j]; break; default: return; } } } Array.Clear(grayValues, 0, bytes); for (int i = 0; i < curBitmap.Height; i++) { for (int j = 0; j < curBitmap.Width; j++) { if (tempArray3[i * curBitmap.Width + j] > thresholding[0]) { grayValues[i * curBitmap.Width + j] = 255; traceEdge(i, j, tempArray3, ref grayValues, thresholding[1]); } } } System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes); curBitmap.UnlockBits(bmpData); } Invalidate(); } } private void pyramid_Click(object sender, EventArgs e) { if (curBitmap != null) { int series = Convert.ToInt16(Math.Log(curBitmap.Width, 2)); glp pyramid = new glp(series); if (pyramid.ShowDialog() == DialogResult.OK) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height); System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = curBitmap.Width * curBitmap.Height; byte[] grayValues = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, grayValues, 0, bytes); double thresh = pyramid.GetThresh; byte level = pyramid.GetLevel; double sigma = pyramid.GetSigma; double[][] pyramidImage = new double[level + 1][]; double[][] passImage = new double[level + 1][]; int levelBytes = bytes; for (int k = 0; k < level + 1; k++) { passImage[k] = new double[levelBytes]; pyramidImage[k] = new double[levelBytes]; levelBytes = levelBytes / 4; } for (int i = 0; i < bytes; i++) pyramidImage[0][i] = Convert.ToDouble(grayValues[i]); for (int k = 0; k < level; k++) { double[] tempImage = null; gaussSmooth(pyramidImage[k], out tempImage, sigma); int coff = pyramidImage[k].Length; for (int i = 0; i < coff; i++) { passImage[k][i] = pyramidImage[k][i] - tempImage[i]; int div = i / Convert.ToInt16(Math.Sqrt(coff)); int rem = i % Convert.ToInt16(Math.Sqrt(coff)); if (div % 2 == 0 && rem % 2 == 0) { int j = (int)((div / 2) * Math.Sqrt(pyramidImage[k + 1].Length) + rem / 2); pyramidImage[k + 1][j] = tempImage[i]; } } } for (int k = level - 1; k >= 0; k--) { int coff = pyramidImage[k].Length; for (int i = 0; i < coff; i++) { int div = i / Convert.ToInt16(Math.Sqrt(coff)); int rem = i % Convert.ToInt16(Math.Sqrt(coff)); int j = (int)((div / 2) * Math.Sqrt(pyramidImage[k + 1].Length) + rem / 2); if (div % 2 == 0 && rem % 2 == 0) pyramidImage[k][i] = pyramidImage[k + 1][j]; else pyramidImage[k][i] = 0; } double[] tempImage = null; gaussSmooth(pyramidImage[k], out tempImage, 1); for (int i = 0; i < coff; i++) pyramidImage[k][i] = tempImage[i] + passImage[k][i]; } zerocross(ref pyramidImage[0], out grayValues,thresh); System.Runtime.InteropServices.Marshal.Copy(grayValues, 0, ptr, bytes); curBitmap.UnlockBits(bmpData); } Invalidate(); } } } }
图像处理标准图像库(非常齐全)
图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术,是人工智能的一个重要领域,另外在地理学中也指将遥感图像进行分类的技术。 一般工业使用中,采用工业相机拍摄图片,然后再利用软件根据图片灰阶差做进一步识别处理,图像识别软件国外代表的有康耐视等,国内代表的有图智能等。
数字图像处理第2版冈萨雷斯-书及全套光盘下载地址(百度网盘)
资源包含: <em>数字图像处理</em>第2版冈萨雷斯.pdf 配套光盘源代码
matlab数字图像处理实验
计算机图像处理实验课1-9,看完本课程可以让你matlab技能小小进步,对图像处理稍微了解。、rn(一)matlab<em>数字图像处理</em>实验-guide的简单使用教程rnrn(二)matlab<em>数字图像处理</em>实验-图像的几何变换rn(三)matlab<em>数字图像处理</em>实验-图像灰度变换处理rnrn(四)matlab<em>数字图像处理</em>实验-平滑处理rnrn未完待续···
数字图像处理,非常经典的教材
非常<em>经典</em>的<em>数字图像处理</em>教材,讲的特别透彻,对学习图像处理,机器视觉很有帮助
数字图像处理lena(bmp,jpg,tif格式)
<em>数字图像处理</em><em>经典</em>图片lena,内含lena实验头像,全身图,jpg格式和bmp格式,清晰度较高
数字图像处理常用BMP图片集合
baboo256.BMP baboon.BMP bank.BMP boat.BMP brain.BMP cman.BMP cman.png couple.BMP crowd.BMP face.BMP flowr.BMP girl.BMP girl512.BMP hat.BMP jet.BMP lena.BMP lena512.BMP loco.BMP martha.BMP reagan.BMP
数字图像处理(MATLAB版)(第二版)完整资源包
冈萨雷斯《<em>数字图像处理</em>matlab版》中完整资源,包括M文件、P文件、图片和案例。
数字图像处理 第三版》(冈萨雷斯)——第十章 图像分割
第十章 图像分割nnnn第十章 图像分割n一点线和边缘检测n1 背景知识n2 孤立点的检测n3 线检测n4 边缘模型n5 基本边缘检测n51 梯度及性质n52 梯度算子nnn6 更先进的边缘检测技术n61 Marr-Hildreth边缘检测器n62 坎尼边缘检测器nnn7 边缘连接和边界检测nnn二阈值处理n1 基本的全局阈值处理n2 用Otsu方法的最佳全局阈值处理nnn三区域分割n1 基于区域
数字图像处理》第三版笔记(一)模糊处理
《<em>数字图像处理</em>》第三版 Rafael C. Gonzalez等著nP50nnn取一个点,(x,y),计算邻域的平均值,赋值给所有的邻域。即可模糊处理。发现邻域越大,越模糊nnnhttps://github.com/penkee/imagecal/blob/master/app-dao/src/main/java/com/dcloud/process/OperateImage.java
数字图像处理05(图像压缩)
一、数据冗余n压缩率、相对数据冗余;n数据冗余的分类:编码冗余、像素冗余(图像的相邻关系)、视觉心里冗余(人眼无法分辨)n二、衡量压缩的指标n压缩比、压缩算法、失真性(以及编码效率、实时性、失真度、设备复杂程度、经济实用性)n常用混合编码,来满足性能和经济上的折中。n三、信息的度量n信息熵,平均码子长,编码效率nn  n四、常见的编码方法nnnnnnn无损压缩:能
冈萨雷斯 《数字图像处理matlab版》.源代码(含修订版)+源图像
包含冈萨雷斯(Gonzalez)编辑的《<em>数字图像处理</em>》第二版对应的matlab版辅助教材《<em>数字图像处理</em>matlab版》的所有m源代码(包含修订的m源代码),以及对应的用于程序运行的图像。希望能帮助你的学习!
数字图像处理视频课程
<em>数字图像处理</em>视频教程,冈萨雷斯第三版<em>数字图像处理</em>中译版PDF
数字图像处理及模式识别
<em>数字图像处理</em>及模式识别<em>经典</em>教材,感兴趣的<em>下载</em>
20个图像处理经典标准图片文件
包括lena,barbara,cameraman,house,peppers,boat等
计算机视觉书籍
这是最近有关AR与VR方面的书籍,主要讲计算机视觉方面的专业书籍,希望对大家有所帮助,
功能非常全的数字图像处理程序(含源代码)
本程序集成了非常全的<em>数字图像处理</em>功能,功能模块包含图像增强,图像拉伸,几何变换,形态学运算,边缘检测,图像复原,小波变换,图像编码,图像匹配,以及特效显示等等。程序使用VC++编写,包含了源代码。
数字图像处理数据集(三)-Set12
<em>数字图像处理</em>常用数据集Set12,12张灰度图(含lena,cameraman,house,pepper,fishstar,monarch,airplane,parrot,barbara,ship,man,couple),大小都为256*256. 预览:https://blog.csdn.net/iteapoy/article/details/86062640
数字图像处理+AI
最近找新工作,越来越发现<em>数字图像处理</em>是很重要的一个工作,以后机器人之类的东西都需要<em>数字图像处理</em>!!rn因此想去学习<em>数字图像处理</em>去了!rn但我东搞搞,西搞搞,也不成样子呀!rn听一个老人说,我做bsp出身,应该朝系统工程师方向演进!是呀,系统工程师,就是做系统!rn做系统解决方案!啥职业也需要不停的学习呀!rn2017.3.20
数字图像处理素材照片
<em>数字图像处理</em>素材<em>照片</em>,资源宝贵,欢迎咨询
用于数字图像处理的Matlab高斯滤波
用于<em>数字图像处理</em>的Matlab高斯滤波,此为单独封装的函数
数字图像处理基本知识点1(冈萨雷斯)
1、像素:数字图像由二维的元素组成,每个元素具有一个特定的位置(x, y)和幅值 f (x, y), 这些元素称为像素。单通道(灰度图)图像:0-黑,255-白;三通道(彩色图)图像:可用红绿蓝三元组的二维矩阵表示,0-相应基色没有,255-相应基色在该像素中取最大.rn2、图像存储系统:图像文件格式:gif/jpg-互联网, tif/jpg/bmp-国际标准, 网络存储-SAN(存储区域网)/N
拼图--把N张图片拼接出另一张图片
把一些图片拼接出一张新的图片,在移动公司等广告中常见该种效果。
基于数字图像处理对蔬菜叶面积的测量
重点研究了蔬菜叶片的预处理技术、蔬菜叶的边缘提取与处理、蔬菜叶面积的计算等理论,并运用MATLAB语言编写了一套软件。多张图像的测试结果显示,本文所编写的软件能够有效地排除噪音的干扰,准确地计算出蔬菜叶的面积,具有一定的使用价值。
数字图像处理——用Java对数字图像写水印
写水印这个是<em>数字图像处理</em>中十分常见的操作,比如我们在CSDN上传个图片啥的,它还要在图片的右下方写点“http://blog.csdn.net/sinat_36246371”,那么我们用Java代码也在图片上写点啥,直接看代码吧。import java.awt.Color;nimport java.awt.Font;nimport java.awt.Graphics;nimport java.awt
数字图像处理领域的二十四个典型算法及vc实现、第一章
<em>数字图像处理</em>领域的二十四个典型算法及vc实现、第一章rnrn参考:百度百科、维基百科、vc<em>数字图像处理</em>。rn--------------------------------------------------rn<em>数字图像处理</em>领域的二十四个典型算法及vc实现、第一章rn一、256色转灰度图rn二、Walsh变换rn三、二值化变换rn四、阈值变换rn五、傅立叶变换rn六、离散余弦变换rnrn数字图像处
数字图像处理提取链码
MATLAB对MNIST手写数字数据库,编程实现来提取其链码。
计算机视觉和图像处理常用的一些标准图片
airplanernrnrnrnrnrnbaboonrnrnrnrnrnrnrnrnrnrnrnrnrnrnbookrnrnrnrnrnrnrnrnrnrncatrnrnrnrnrnrnrnrnrnrnfruitsrnrnrnrnrnrnrnrnhand_sample1rnrnrnrnrnrnrnrnrnrnhand_sample2rnrnrnrnrnrnrnrnrnrnhand_sample3r
【读书笔记】《数字图像处理》(第三版)[刚萨雷斯]-第12章 目标识别
目标识别、分类器、神经网络的基本概念。
数字图像处理编程入门.pdf
最<em>经典</em>的 <em>数字图像处理</em>编程入门 课程,欢迎<em>下载</em>并留言!
数字图像处理论文阅读笔记——图形分类与检测初步概念
    《图像物体分类与检测算法综述》——黄凯奇、任伟强、谭铁牛的阅读笔记。nn    一、目的nn    以此论文建立<em>数字图像处理</em>的总体概念,其中“<em>数字图像处理</em>”的概念有待确认。nn    二、简述nn在摘即使你的话要部分指出图像物体这个主体的两个基本问题就是分类与检测,其次才有分割、跟踪、行为分析等后续操作(在此部分,由于查阅过纺织服装的智能检测的两篇论文,在图像分割后的操作有所差异——为聚类...
千图成像:用N张图片拼凑成一张图片。
千图成像:用N张图片拼凑成一张图片。 实现原理:先将所要成像的图片转化成马赛克图片,然后从图库中用对应颜色的图片替换相应色块。 图库中的图片处理:标记图库中每张图片的混合颜色,用于替换目标色块,并记录每张图片的特征用于成像,增加成像质量。
数字图像处理(第三版) 冈萨雷斯 带书签高清版
在<em>数字图像处理</em>领域,本书作为主要教材已有30多年。这一版本是作者在前两版的基础上修订而成的,是前两版的发展与延续。除保留了前两版的大部分内容外,根据读者的反馈,作者在13个方面对本书进行了修订,新增了400多幅图像、200多幅图表及80多道习题,融入了近年来<em>数字图像处理</em>领域的重要进展,因而本书特色鲜明且与时俱进。全书仍分为12章,即绪论、数字图像基础、灰度变换与空间滤波、频率域滤波、图像复原与重建、彩色图像处理、小波和多分辨率处理、图像压缩、形态学图像处理、图像分割、表示与描述、目标识别。
数字图像处理实验(总计23个)汇总
<em>数字图像处理</em>实验(1):PROJECT 02-01, Image Printing Program Based on Halftoning
数字图像处理中文第三版PDF
<em>数字图像处理</em>中文第三版PDF冈萨雷斯
数字图像处理(第三版)高清完整书签
在<em>数字图像处理</em>领域,本书作为主要教材已有30多年。这一版本是作者在前两版的基础上修订而成的,是前两版的发展与延续。除保留了前两版的大部分内容外,根据读者的反馈,作者在13个方面对本书进行了修订,新增了400多幅图像、200多幅图表及80多道习题,融入了近年来<em>数字图像处理</em>领域的重要进展,因而本书特色鲜明且与时俱进。全书仍分为12章,即绪论、数字图像基础、灰度变换与空间滤波、频率域滤波、图像复原与重建、彩色图像处理、小波和多分辨率处理、图像压缩、形态学图像处理、图像分割、表示与描述、目标识别。
数字图像处理-照片OCR
项目描述:将一副图片中文字识别出来, 这样就可以实现输入<em>照片</em>中的文字就把<em>照片</em>找出来了。目前对于数码<em>照片</em>中的文字识别出来还是一件比较复杂的机器学习问题。比较好的应用是,为盲人指路,利用摄像头拍摄前方路况,然后将<em>照片</em>中的文本识别出来,告诉给盲人达到指路的功能。rnOCR流水线:(每一个过程都可以看成一个机器学习组件)rn1、<em>照片</em>中的文本探测rn利用有一个固定长宽比的滑窗去寻找图片中的文字,这个过程我们
数字图像处理(第6版)pdf
国外电子与通信教材系列:<em>数字图像处理</em>(第6版)是关于图像处理基本原理及其具体应用的图书,是作者多年来教学、科研与应用的总结。《国外电子与通信教材系列:<em>数字图像处理</em>(第6版)》共15章,内容贯穿从图像获取到应用的整个过程,具体包括图像获取、人类视觉、打印和存储、成像缺陷修正、空间域图像增强、频率域图像处理、分割和阈值处理、二值图像处理、全局图像测量、特定特征的测量、形状表征、特征识别与分类、层析成像、三维可视化、表面成像。
数字图像处理 原书第四版 pdf 带书签
数字图像领域圣经 由冈萨雷斯(Rafael C.Gonzalez)教授编著的<em>数字图像处理</em>(Digital Image Processing) 今年已经出到了第四版 第四版中加入了机器学习深度学习用于图像模式识别的讨论
数字图像处理(第3版)(中文版)(高清晰)
《<em>数字图像处理</em>(第3版)》是<em>数字图像处理</em><em>经典</em>著作,作者在对32个国家的134个院校和研究所的教师、学生及自学者进行广泛调查的基础上编写了第三版。除保留了第二版的大部分主要内容外,还根据收集的建议从13个方面进行了修订,新增400多幅图像、200多个图表和80多道习题,同时融入了近年来本科学领域的重要发展,使《<em>数字图像处理</em>(第3版)(英文版)》具有相当的特色与先进性。全书分为12章,包括绪论、数字图像基础、灰度变换与空间滤波、频域滤波、图像复原与重建、彩色图像处理、小波及多分辨率处理、图像压缩、形态学图像处理、图像分割、表现与描述、目标识别。
冈萨雷斯-数字图像处理高清PDF
图像处理<em>经典</em>教材,高清PDF版。全书分为12章,包括绪论、数字图像基础、灰度变换与空间滤波、频域滤波、图像复原与重建、彩色图像处理、小波及多分辨率处理、图像压缩、形态学图像处理、图像分割、表现与描述、目标识别。
lena等37张经典灰度图
我自己收集的37张<em>经典</em>灰度图,包括lena等,均为256*256,做图像处理的同学必不可少。
数字图像处理(MATLAB版)冈萨雷斯+中文高清版
《<em>数字图像处理</em>(MATLAB版)》是把图像处理基础理论论述与软件实践方法相结合的第一本书,它集成了冈萨雷斯和伍兹所著的《<em>数字图像处理</em>》一书中的重要内容和MathWorks公司的图像处理工具箱。本书的特色在于它重点强调了怎样通过开发新代码来增强这些软件工具。本书在介绍MATLAB编程基础知识之后,讲述了图像处理的主要内容,具体包括亮度变换、线性和非线性空间滤波、频率域滤波、图像复原与配准、彩色图像处理、小波、图像数据压缩、形态学图像处理、图像分割、区域和边界表示与描述以及对象识别等。
数字图像处理_第三版_中文版_冈萨雷斯.pdf
<em>数字图像处理</em>_第三版_中文版_冈萨雷斯.pdf,介绍了<em>数字图像处理</em>基础知识,通过基础知识的掌握,能快速的入门数字图像领域,对研究生等需要深入研究的读者能有巨大帮助
Java数字图像处理.pdf
Java<em>数字图像处理</em>.pdf,<em>数字图像处理</em><em>经典</em>
数字图像处理 原书第四版 pdf完整版
数字图像领域圣经 由冈萨雷斯(Rafael C.Gonzalez)教授编著的<em>数字图像处理</em>(Digital Image Processing) 今年已经出到了第四版 第四版中加入了机器学习深度学习用于图像模式识别的讨论。文件排版清晰,内容完整!
数字图像处理基础(包含代码)
<em>数字图像处理</em>——Visual C#.NET编程与实验 1.概论 2.图像数字化 3.图像处理基础 4.图像几何变换 5.图像时频变换 6.图像增强 7.图像恢复 8.图像分割 9.图像特征和分析 10.图像形态学 11.模式识别 12.图像压缩 13.分形图像压缩 14.图像加密 15.图像水印
北京大学数字图像处理(冈萨雷斯)课件.pdf
很好的课件,北京大学研究生课程用的哦 配套书籍:冈萨雷斯<em>数字图像处理</em>MATLAB版.中文版 内容简介 《<em>数字图像处理</em>(MATLAB版)》是把图像处理基础理论论述与软件实践方法相结合的第一本书,它集成了冈萨雷斯和伍兹所著的《<em>数字图像处理</em>》一书中的重要内容和MathWorks公司的图像处理工具箱。本书的特色在于它重点强调了怎样通过开发新代码来增强这些软件工具。本书在介绍MATLAB编程基础知识之后,讲述了图像处理的主要内容,具体包括亮度变换、线性和非线性空间滤波、频率域滤波、图像复原与配准、彩色图像处理、小波、图像数据压缩、形态学图像处理、图像分割、区域和边界表示与描述以及对象识别等。 编辑推荐 《<em>数字图像处理</em>(MATLAB版)》主要特点:本书自成体系;开发了超过60个新的图像处理函数;详细涉及了在MATLAB中使用C代码的方法; 提供了114个示例、400多幅图像、150多幅图形和线条图;详细探讨了图形用户界面(GUI)的设计;本书的配套网站提供全面支持(M文件、图像文件、教辅材料、更新等)。
数字图像处理第三版(中文)
<em>数字图像处理</em><em>经典</em>书籍,<em>数字图像处理</em>第三版(中文版)高清
数字图像处理 冈萨雷斯 第三版 pdf
第三版 冈萨雷斯 pdf 全部内容 字迹清晰 我这里还有对应的图片 全部的 都是第三版
数字图像处理与分析(贾永红).pdf 不要分
<em>数字图像处理</em>与分析(贾永红).pdf 很好的<em>数字图像处理</em>教程 不要分了
读和写注册表文件的例子下载
&nbsp;读和写注册表文件的例子&nbsp; 相关下载链接:[url=//download.csdn.net/download/chenxh/103?utm_source=bbsseo]//download.csdn.net/download/chenxh/103?utm_source=bbsseo[/url]
新闻发布系统源码(ASP.NET)下载
新闻发布系统!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 相关下载链接:[url=//download.csdn.net/download/zsx_22204936/2495884?utm_source=bbsseo]//download.csdn.net/download/zsx_22204936/2495884?utm_source=bbsseo[/url]
几个android游戏源码下载
——————几个android游戏源码________ 相关下载链接:[url=//download.csdn.net/download/xlsdg/3350806?utm_source=bbsseo]//download.csdn.net/download/xlsdg/3350806?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据经典学习路线下载 大数据培训下载
我们是很有底线的