图像增强技术:灰度变换与对比度拉伸

需积分: 5 0 下载量 3 浏览量 更新于2024-08-03 收藏 423KB PDF 举报
"该资源是一份关于图像增强的上机练习内容,主要涉及灰度变换这一主题,包括基本概念、作用以及常用的灰度变换方法,如线性函数和对数函数,并提供了绘制直方图及执行全局线性变换的Python代码示例。" 在图像处理领域,图像增强是一种提升图像质量的技术,它通过对图像像素值的调整来优化图像的视觉效果。这篇资料主要讲解了灰度变换,这是图像增强的一个关键部分。灰度变换是针对图像的每个像素进行操作,其目标通常是增强图像的对比度或进行阈值处理。 1. **灰度变换基本概念** 灰度变换是通过应用一个特定的函数(灰度变换函数T)来改变图像的像素值,公式为:s = T(r),其中s是变换后的像素值,r是变换前的像素值。这种变换有助于改善图像质量,突出或抑制特定特征,以及调整图像的直方图分布。 2. **灰度变换的作用** - **改善图像质量**:通过增加对比度(对比度拉伸),使图像细节更加明显。 - **突出特征**:可以选择性地增强图像中感兴趣区域的特征,同时抑制不重要的部分。 - **直方图均衡化**:通过改变像素分布,使得图像直方图更加均匀,有助于视觉上的清晰度。 3. **常用灰度变换函数** - **线性函数**:包括图像反转,通过简单的线性映射改变像素值。例如,全局线性变换可以通过以下公式实现:s = (r - a) * c + b,其中a和b对应于原图像的最小和最大灰度值,c为缩放系数。 - **对数函数**:对数和指数变换可以处理动态范围较大的图像,增强低灰度区的细节。 文件中还提供了绘制直方图和执行全局线性变换的Python代码片段,使用OpenCV和matplotlib库。首先,代码展示了如何读取图像并绘制直方图,以理解原始图像的灰度分布。接着,定义了一个全局线性变换函数,通过计算图像的最大和最小灰度值来调整像素值,使其覆盖0到255的全灰度范围。最后,代码显示了原始图像和经过线性变换后的图像及其直方图,以直观比较变换效果。 这份上机练习内容详细介绍了灰度变换的概念、目的和实现方式,结合Python代码实例,有助于读者理解和实践图像增强技术。

优化这段代码 declare @BH varchar(20) declare @CJ varchar(20) declare @JT varchar(20) declare @DTSL varchar(20) declare @SJRQ varchar(20) declare @XJRQ varchar(20) declare @SJTS varchar(20) declare @SJTSCK varchar(20) declare @SJTSZD varchar(20) declare @BEIZHU varchar(20) DECLARE youbiao CURSOR FOR--游标 select a.FNumber 编号, --a.F_101 刀头厂家内码, b.FName 刀头厂家, --a.F_107 大切机台内码, c.FName 大切机台, a.F_103 刀头数量, a.F_104 上机日期, a.F_105 下机日期, a.F_109 上机天数, a.F_110 "上机天数(参考)", DATEDIFF(day,a.F_104,a.F_105) "上机天数(自动计算)", --要减掉中间没有生产的日期? a.F_108 备注 from t_Item_3030 a left join t_Item_3013 b on a.F_101=b.FItemID left join t_Item_3010 c on a.F_107=c.FItemID open youbiao fetch next from youbiao into @BH,@CJ,@JT,@DTSL,@SJRQ,@XJRQ,@SJTS,@SJTSCK,@SJTSZD,@BEIZHU----赋值 while @@fetch_status=0 --循环读取 begin fetch next from youbiao into @BH,@CJ,@JT,@DTSL,@SJRQ,@XJRQ,@SJTS,@SJTSCK,@SJTSZD,@BEIZHU select @BH 编号, @CJ 刀头厂家, a2.机台号, @SJRQ 上机日期, @XJRQ 下机日期, @SJTS 上机天数, @SJTSCK 上机天数参考, @SJTSZD 上机天数自动, @BEIZHU 备注, SUM(a2.平方数)平方数, SUM(a2.立方数)立方数 from( SELECT a1.生产日期, a1.机台号, sum(a1.平方数)平方数, sum(a1.立方数)立方数 FROM( select --a.FDate 生产日期, convert(char(10),a.FDate,121) 生产日期, --b.FBase 大切机台内码, c.FName 机台号, b.FDecimal4 厚度CM, b.FDecimal 平方数, b.FDecimal1 立方数, --b.FBase4 刀头厂商内码, --g.FNumber 刀头厂商编号, g.FName 刀头厂商 from t_BOS200000001 a left join t_BOS200000001Entry2 b on a.FID=b.FID left join t_Item_3010 c on b.FBase=c.FItemID left join t_Item_3014 d on b.FBase1=d.FItemID left join t_Item_3011 e on b.FBase2=e.FItemID left join t_Item_3012 f on b.FBase3=f.FItemID left join t_Item_3013 g on b.FBase4=g.FItemID where a.FDate between @SJRQ and @XJRQ and c.FName=@JT )a1 group by a1.机台号,a1.生产日期 )a2 group by a2.机台号 end close youbiao --关闭 deallocate youbiao--释放

2023-03-10 上传