社区
GAME,图形处理/多媒体
帖子详情
求图像处理 边缘检测(包括Roberts算子、Krisch算子、Gauss-Laplace高斯-拉普拉斯算子三种算子)的源代码!谢谢!
hyf58hyf36
2008-01-02 04:00:38
邮箱:hyf1313@sina.com
...全文
4745
7
打赏
收藏
求图像处理 边缘检测(包括Roberts算子、Krisch算子、Gauss-Laplace高斯-拉普拉斯算子三种算子)的源代码!谢谢!
邮箱:hyf1313@sina.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Bluesky605
2011-10-25
打赏
举报
回复
谢谢,不错
lin_lin_2009
2009-05-07
打赏
举报
回复
不错!
sunshine09010208
2008-05-13
打赏
举报
回复
冒昧的问一句
这个类的代码你有吗?
MatrixNxN
knowledge_Is_Life
2008-05-01
打赏
举报
回复
有问题请先GOOGLE,BAIDU
leedoub
2008-04-10
打赏
举报
回复
看了可以给我加点分谢谢!
leedoub
2008-04-10
打赏
举报
回复
m.Init(0);
m.TopMid = m.MidRight = 1;
m.MidLeft = m.BottomMid = -1;
m.TopRight = 2;
m.BottomLeft = -2;
Bitmap b3 = m.Convolute((Bitmap)b.Clone());
// -2 -1 0
// -1 0 1
// 0 1 2
m.Init(0);
m.TopMid = m.MidLeft = -1;
m.MidRight = m.BottomMid = 1;
m.TopLeft = -2;
m.BottomRight = 2;
Bitmap b4 = m.Convolute((Bitmap)b.Clone());
// 梯度运算
b = Gradient(Gradient(b1, b2), Gradient(b3, b4));
b1.Dispose(); b2.Dispose(); b3.Dispose(); b4.Dispose();
return b;
} // end of Sobel
///
/// 按 Prewitt 算子进行边缘检测
///
/// 位图流
///
public Bitmap Prewitt(Bitmap b)
{
Matrix3x3 m = new Matrix3x3();
// -1 -1 -1
// 0 0 0
// 1 1 1
m.Init(0);
m.TopLeft = m.TopMid = m.TopRight = -1;
m.BottomLeft = m.BottomMid = m.BottomRight = 1;
Bitmap b1 = m.Convolute((Bitmap)b.Clone());
// -1 0 1
// -1 0 1
// -1 0 1
m.Init(0);
m.TopLeft = m.MidLeft = m.BottomLeft = -1;
m.TopRight = m.MidRight = m.BottomRight = 1;
Bitmap b2 = m.Convolute((Bitmap)b.Clone());
// -1 -1 0
// -1 0 1
// 0 1 1
m.Init(0);
m.TopLeft = m.MidLeft = m.TopMid = -1;
m.BottomMid = m.BottomRight = m.MidRight = 1;
Bitmap b3 = m.Convolute((Bitmap)b.Clone());
// 0 1 1
// -1 0 1
// -1 -1 0
m.Init(0);
m.TopMid = m.TopRight = m.MidRight = 1;
m.MidLeft = m.BottomLeft = m.BottomMid = -1;
Bitmap b4 = m.Convolute((Bitmap)b.Clone());
// 梯度运算
b = Gradient(Gradient(b1, b2), Gradient(b3, b4));
b1.Dispose(); b2.Dispose(); b3.Dispose(); b4.Dispose();
return b;
} // end of Prewitt
///
/// 按 Kirsch 算子进行边缘检测
///
/// 位图流
///
public Bitmap Kirsch(Bitmap b)
{
Matrix3x3 m = new Matrix3x3();
// 5 5 5
// -3 0 -3
// -3 -3 -3
m.Init(-3);
m.Center = 0;
m.TopLeft = m.TopMid = m.TopRight = 5;
Bitmap b1 = m.Convolute((Bitmap)b.Clone());
// -3 5 5
// -3 0 5
// -3 -3 -3
m.Init(-3);
m.Center = 0;
m.TopMid = m.TopRight = m.MidRight = 5;
Bitmap b2 = m.Convolute((Bitmap)b.Clone());
// -3 -3 5
// -3 0 5
// -3 -3 5
m.Init(-3);
m.Center = 0;
m.TopRight = m.MidRight = m.BottomRight = 5;
Bitmap b3 = m.Convolute((Bitmap)b.Clone());
// -3 -3 -3
// -3 0 5
// -3 5 5
m.Init(-3);
m.Center = 0;
m.MidRight = m.BottomRight = m.BottomMid = 5;
Bitmap b4 = m.Convolute((Bitmap)b.Clone());
// -3 -3 -3
// -3 0 -3
// 5 5 5
m.Init(-3);
m.Center = 0;
m.BottomLeft = m.BottomMid = m.BottomRight = 5;
Bitmap b5 = m.Convolute((Bitmap)b.Clone());
// -3 -3 -3
// 5 0 -3
// 5 5 -3
m.Init(-3);
m.Center = 0;
m.MidLeft = m.BottomLeft = m.BottomMid = 5;
Bitmap b6 = m.Convolute((Bitmap)b.Clone());
// 5 -3 -3
// 5 0 -3
// 5 -3 -3
m.Init(-3);
m.Center = 0;
m.TopLeft = m.MidLeft = m.BottomLeft = 5;
Bitmap b7 = m.Convolute((Bitmap)b.Clone());
// 5 5 -3
// 5 0 -3
// -3 -3 -3
m.Init(-3);
m.Center = 0;
m.TopLeft = m.MidLeft = m.TopMid = 5;
Bitmap b8 = m.Convolute((Bitmap)b.Clone());
// 梯度运算
Bitmap b9 = Gradient(Gradient(b1, b2), Gradient(b3, b4));
Bitmap b10 = Gradient(Gradient(b5, b6), Gradient(b7, b8));
b = Gradient(b9, b10);
b1.Dispose(); b2.Dispose(); b3.Dispose(); b4.Dispose();
b5.Dispose(); b6.Dispose(); b7.Dispose(); b8.Dispose();
b9.Dispose(); b10.Dispose();
return b;
} // end of Kirsch
///
/// 按 GaussLaplacian 算子进行边缘检测
///
///
///
public Bitmap GaussLaplacian(Bitmap b)
{
int[,] kernel = {
{-2, -4, -4, -4, -2},
{-4, 0, 8, 0, -4},
{-4, 8, 24, 8, -4},
{-4, 0, 8, 0, -4},
{-2, -4, -4, -4, -2}
};
MatrixNxN m = new MatrixNxN();
m.Kernel = kernel;
return m.Convolute(b);
} // end of GaussLaplacian
///
/// 按水平边缘检测算子进行边缘检测
///
///
///
public Bitmap EdgeDetectHorizontal(Bitmap b)
{
int[,] kernel = {
{ 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0},
{-1, -1, -1, -1, -1, -1, -1},
{ 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 1, 1, 1, 1, 1},
{ 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0},
};
MatrixNxN m = new MatrixNxN();
m.Kernel = kernel;
return m.Convolute(b);
} // end of EdgeDetectHorizontal
///
/// 按垂直边缘检测算子进行边缘检测
///
///
///
public Bitmap EdgeDetectVertical(Bitmap b)
{
int[,] kernel = {
{ 0, 0, -1, 0, 1, 0, 0},
{ 0, 0, -1, 0, 1, 0, 0},
{ 0, 0, -1, 0, 1, 0, 0},
{ 0, 0, -1, 0, 1, 0, 0},
{ 0, 0, -1, 0, 1, 0, 0},
{ 0, 0, -1, 0, 1, 0, 0},
{ 0, 0, -1, 0, 1, 0, 0},
};
MatrixNxN m = new MatrixNxN();
m.Kernel = kernel;
return m.Convolute(b);
} // end of EdgeDetectVertical
///
/// 边缘增强
///
/// 位图流
/// 阈值
///
public Bitmap EdgeEnhance(Bitmap b, int threshold)
{
int width = b.Width;
int height = b.Height;
Bitmap dstImage = (Bitmap)b.Clone();
BitmapData srcData = b.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
BitmapData dstData = dstImage.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
// 图像实际处理区域
// 不考虑最左 1 列和最右 1 列
// 不考虑最上 1 行和最下 1 行
int rectTop = 1;
int rectBottom = height - 1;
int rectLeft = 1;
int rectRight = width - 1;
unsafe
{
byte* src = (byte*)srcData.Scan0;
byte* dst = (byte*)dstData.Scan0;
int stride = srcData.Stride;
int offset = stride - width * BPP;
int pixel = 0;
int maxPixel = 0;
// 指向第 1 行
src += stride;
dst += stride;
for (int y = rectTop; y < rectBottom; y++)
{
// 指向每行第 1 列像素
src += BPP;
dst += BPP;
for (int x = rectLeft; x < rectRight; x++)
{
// Alpha
dst[3] = src[3];
// 处理 B, G, R 三分量
for (int i = 0; i < 3; i++)
{
// 右上-左下
maxPixel = src[i - stride + BPP] - src[i + stride - BPP];
if (maxPixel < 0) maxPixel = -maxPixel;
// 左上-右下
pixel = src[i - stride - BPP] - src[i + stride + BPP];
if (pixel < 0) pixel = -pixel;
if (pixel > maxPixel) maxPixel = pixel;
// 上-下
pixel = src[i - stride] - src[i + stride];
if (pixel < 0) pixel = -pixel;
if (pixel > maxPixel) maxPixel = pixel;
// 左-右
pixel = src[i - BPP] - src[i + BPP];
if (pixel < 0) pixel = -pixel;
if (pixel > maxPixel) maxPixel = pixel;
// 进行阈值判断
if (maxPixel < threshold) maxPixel = 0;
dst[i] = (byte)maxPixel;
}
// 向后移一像素
src += BPP;
dst += BPP;
} // x
// 移向下一行
// 这里得注意要多移 1 列,因最右边还有 1 列不必处理
src += offset + BPP;
dst += offset + BPP;
} // y
}
// b.UnlockBits(srcData);
dstImage.UnlockBits(dstData);
b.Dispose();
return dstImage;
} // end of EdgeEnhance
}
该文章转载自网络大本营:http://www.xrss.cn/Dev/C/200812218586.Html
leedoub
2008-04-10
打赏
举报
回复
边缘检测类(包括Roberts, Sobel, Prewitt, Kirsch等算子的边缘检测算法)
public class EdgeDetect : ImageInfo
{
/************************************************************
*
* Roberts, Sobel, Prewitt, Kirsch, GaussLaplacian
* 水平检测、垂直检测、边缘增强、边缘均衡化
*
************************************************************/
///
/// 对两幅图像进行梯度运算
///
/// 位图 1
/// 位图 2
///
private Bitmap Gradient(Bitmap b1, Bitmap b2)
{
int width = b1.Width;
int height = b1.Height;
BitmapData data1 = b1.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
BitmapData data2 = b2.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
unsafe
{
byte* p1 = (byte*)data1.Scan0;
byte* p2 = (byte*)data2.Scan0;
int offset = data1.Stride - width * BPP;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
for (int i = 0; i < 3; i++)
{
int power = (int)Math.Sqrt((p1[i] * p1[i] + p2[i] * p2[i]));
p1[i] = (byte)(power > 255 ? 255 : power);
} // i
p1 += BPP;
p2 += BPP;
} // x
p1 += offset;
p2 += offset;
} // y
}
b1.UnlockBits(data1);
b2.UnlockBits(data2);
Bitmap dstImage = (Bitmap)b1.Clone();
b1.Dispose();
b2.Dispose();
return dstImage;
} // end of Gradient
///
/// 按 Roberts 算子进行边缘检测
///
/// 位图流
///
public Bitmap Roberts(Bitmap b)
{
int width = b.Width;
int height = b.Height;
Bitmap dstImage = new Bitmap(width, height);
BitmapData srcData = b.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
BitmapData dstData = dstImage.LockBits(new Rectangle(0, 0, width, height),
ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
int stride = srcData.Stride;
int offset = stride - width * BPP;
unsafe
{
byte* src = (byte*)srcData.Scan0;
byte* dst = (byte*)dstData.Scan0;
int A, B; // A(x-1, y-1) B(x, y-1)
int C, D; // C(x-1, y) D(x, y)
// 指向第一行
src += stride;
dst += stride;
// 不处理最上边和最左边
for (int y = 1; y < height; y++)
{
// 指向每行第一列
src += BPP;
dst += BPP;
for (int x = 1; x < width; x++)
{
for (int i = 0; i < 3; i++)
{
A = src[i - stride - BPP];
B = src[i - stride];
C = src[i - BPP];
D = src[i];
dst[i] = (byte)(Math.Sqrt((A - D) * (A - D) + (B - C) * (B - C)));
} // i
dst[3] = src[3];
src += BPP;
dst += BPP;
} // x
src += offset;
dst += offset;
} // y
}
b.UnlockBits(srcData);
dstImage.UnlockBits(dstData);
b.Dispose();
return dstImage;
} // end of Roberts
/// /// 按 Sobel 算子进行边缘检测
///
/// 位图流
///
public Bitmap Sobel(Bitmap b)
{
Matrix3x3 m = new Matrix3x3();
// -1 -2 -1
// 0 0 0
// 1 2 1
m.Init(0);
m.TopLeft = m.TopRight = -1;
m.BottomLeft = m.BottomRight = 1;
m.TopMid = -2;
m.BottomMid = 2;
Bitmap b1 = m.Convolute((Bitmap)b.Clone());
// -1 0 1
// -2 0 2
// -1 0 1
m.Init(0);
m.TopLeft = m.BottomLeft = -1;
m.TopRight = m.BottomRight = 1;
m.MidLeft = -2;
m.MidRight = 2;
Bitmap b2 = m.Convolute((Bitmap)b.Clone());
// 0 1 2
// -1 0 1
// -2 -1 0
该文章转载自网络大本营:http://www.xrss.cn/Dev/C/200812218586.Html
TypeScript类型系统与全栈项目资源包
本资源包整理了TypeScript类型系统设计检查清单、前后端接口契约模板、全栈项目目录结构、tsconfig配置基线、CI质量门禁、JavaScript迁移到TypeScript计划和常见问题排查指南,适合前端开发、Node.js后端开发、全栈工程化学习和团队代码质量建设参考。内容为原创模板,不包含真实生产密钥、账号、内部仓库地址或敏感配置,可按项目实际技术栈调整。
轻量级物联网开源平台,6分钟快速部署,千万级设备承载、电信级稳定性 物模型-规则引擎-数据通道-组态页面全流程低代码开发、前后端完全开源、支持多行业工业协议
DGIOT是国内首款轻量级开源工业物联网平台,我们致力于提供五类物联网解决方案:国企/研究院:平台代码开源,无版权产权困扰,国产无“卡脖”之忧;系统集成商:通用设备海量接入、定制设备二次开发、6分钟一键式私有化快速部署,低成本(降90%成本);工业设备制造商:海量设备上线运维,不受公有云限制,低成本,短周期自建平台,私有化部署,数据安全;开源平台开发者:一键式开发环境,集成和兼容各种最优开源工具,快速承接物联网项目;垂直领域物联网平台:快速部署私有化平台,千万级承载,运营级底座,全开放扩展
单相逆变器闭环逆变电路PWM模型仿真研究(Simulink仿真实现)
内容概要:本文围绕“单相逆变器闭环逆变电路PWM模型仿真研究”展开,基于Simulink平台构建单相逆变器的闭环控制系统仿真模型,重点研究PWM调制技术在逆变电路中的应用与实现。文中详细阐述了系统架构设计、电压电流双闭环控制策略的实现原理、控制器参数设计及仿真建模全过程,并通过仿真结果验证了控制方案在动态响应、稳态精度与系统稳定性方面的有效性。同时,文档还涵盖多种电力电子系统典型应用场景,如多类型短路故障仿真(中性点不接地、经小电阻接地、经消弧线圈接地等)、软开关技术、微电网能量管理、MPPT控制等,体现出较强的技术综合性和工程实践价值。; 适合人群:电气工程、自动化、电力电子与新能源等相关专业的高校本科生、研究生、科研人员,以及从事电力系统仿真、逆变器设计与新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的单相逆变器闭环控制系统建模与PWM仿真方法;②深入理解双闭环控制、SPWM/SVPWM调制、系统稳定性分析等核心技术原理;③为课程设计、毕业设计、科研项目或实际工程开发提供可复用的仿真模型与技术支持; 阅读建议:建议结合文中仿真模型动手实践,重点掌握PI控制器参数整定、PWM信号生成机制与仿真结果分析方法,同时可延伸学习文档中涉及的软开关、故障仿真、微电网控制等关联技术,以拓展系统级设计能力。
群内分享图纸缺字报错,综合字体库从容应对.rar
做 CAD 的小伙伴注意啦!打开图纸文字乱码、缺字、全是问号?别慌,我整理了全套解决办法,大部分这类问题都能一次性修好,欢迎下载!
基于net8/10的跨平台高性能开源的工业物联网(IIoT)边缘计算网关 专注于工业现场设备数据的高效采集、边缘处理与可靠转发 项目面向真实工业场景设计,强调 稳定性、高性能、可扩展性与工程可维护性
一个开源的工业物联网(IIoT)边缘计算网关,专注于工业现场设备数据的高效采集、边缘处理与可靠转发。项目面向真实工业场景设计,强调 稳定性、高性能、可扩展性与工程可维护性,适用于工业自动化、能源、电力、制造、楼宇等多种应用环境。ThingsGateway 采用模块化与插件化架构,支持多种工业通信协议,可在边缘侧完成数据采集、预处理、协议转换与转发,有效降低系统耦合度与云端压力,是构建工业物联网系统的基础设施组件。
GAME,图形处理/多媒体
1,184
社区成员
14,330
社区内容
发帖
与我相关
我的任务
GAME,图形处理/多媒体
Delphi GAME,图形处理/多媒体
复制链接
扫一扫
分享
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章