二灰度图像的线性变换

合集下载

图像灰度变换原理

图像灰度变换原理

图像灰度变换原理
图像灰度变换原理是指通过对图像的像素点进行灰度值的变换,从而改变图像的亮度和对比度。

灰度变换可以通过增加或减少像素值来改变图像的灰度级,并根据需求来调整图像的亮度和对比度。

灰度变换可以用以下数学公式表示:
g(x, y) = T(f(x, y))
其中,f(x, y)表示输入图像的灰度级,g(x, y)表示输出图像的
灰度级,T表示灰度变换函数。

常见的灰度变换函数有线性变换、非线性变换和直方图均衡化等。

线性灰度变换函数是最简单的一种灰度变换方式,通过对输入图像的每一个像素点应用一个线性方程来实现灰度的线性变换。

线性变换可以改变图像的对比度和亮度。

常见的线性灰度变换函数有平方根变换、指数变换和对数变换等。

非线性灰度变换函数则是通过对输入图像的每一个像素点应用一个非线性方程来实现灰度的非线性变换。

非线性变换可以实现更加复杂的灰度调整,例如增强图像的细节或者减少图像的噪声。

常见的非线性灰度变换函数有伽马变换和分段线性变换等。

直方图均衡化是一种特殊的灰度变换方法,通过对输入图像的
灰度级进行重新分配,使得输出图像的灰度级分布更加均匀。

直方图均衡化可以提高图像的对比度,使得图像的细节更加清晰。

总的来说,图像灰度变换原理是通过对图像的像素点进行灰度值的变换,来改变图像的亮度和对比度。

不同的灰度变换函数可以实现不同的灰度调整效果,根据需求选择合适的灰度变换方法可以获得满足要求的图像效果。

图像的灰度变换

图像的灰度变换

昆明理工大学(数字图像处理)实验报告实验名称:图像的灰度变换专业:电子信息科学与技术姓名:学号:成绩:[实验目的]1、理解并掌握灰度变换的基本原理和方法。

2、编程实现图像灰度变换。

3、分析不同的灰度变换方法对最终图像效果的影响。

[实验内容]1、灰度的线性变换;2、灰度的非线性变换;3、图像的二值化;4、图像的反色处理;[实验原理]图像的灰度变换 ( gray scale transformation, GST ) 处理是图像增强处理技术中一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。

灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。

目的是为了改善画质,使图像的显示效果更加清晰。

灰度变换有时又被称为图像的对比度增强或对比度拉伸。

从图像输入装置得到的图像数据, 以浓淡表示, 各个像素与某一灰度值相对应。

设原图像像素的灰度值 D=f(x,y),处理后图像像素的灰度值D′= g (x,y),则灰度增强可表示为:g(x,y)=T[f(x,y)]或 D ′= T (D)要求 D 和 D′都在图像的灰度范围之内。

函数 T(D) 称为灰度变换函数,它描述了输入灰度值和输出灰度值之间的转换关系。

灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占据的灰度范围而使图像在视觉上得到良好的改观,没有利用像素点之间的相互空间关系。

因此,灰度变换处理方法也叫做点运算法。

点运算可以按照预定的方式改变一幅图像的灰度直方图。

除了灰度级的改变是根据某种特定的灰度变换函数进行之外,点运算可以看做是“从像素到像素”的复制操作。

根据g(x,y)=T[f(x,y)] , 可以将灰度变换分为线性变换和非线性变换。

1、灰度的线性变换若g(x,y)=T[f(x,y)]是一个线性或分段线性的单值函数,例如g(x,y)=T[f(x,y)]=af(x,y)+b则由它确定的灰度变换称为灰度线性变换,简称线性变换。

实验-灰度图像的线性变换

实验-灰度图像的线性变换

实验三灰度图像的线性变换一、实验目的1.了解灰度变换的基本原理;2.掌握线性变换处理的方法;3.利用VC编写图像线性变换处理的程序;4.在微机上调试程序。

二、实验原理灰度级修正是对图像在空间域进行增强的简单而效果明显的方法,根据图像降质不同的原因以及对图像特征的不同要求而采用不同的修正方法。

主要有灰度变换法和修正法。

它们是把原图像的灰度函数f(x,y)经过一个变换函数T(.)变换成一个新的图像函数g(x,y),即g(x,y)=T[f(x,y)]通过变换,达到对比度增强的效果,要注意在变换的过程中,对每一个象素(x,y)都经过了同样的处理,因此该方法又叫做点处理。

本实验完成灰度图像的线性变换处理。

1.灰度变换法一般成像系统只具有一定的亮度范围,亮度的最大值与最小值之比称为对比度。

由于形成图像的系统亮度有限,常出现对比度不足的弊病,使人眼观看图像时视觉效果很差,通过灰度变换法可以大大改善人的视觉效果。

灰度变换法又可分为三种:线性、分段线性及非线性变换。

(1)线性变换假定原图像f(x,y)的灰度范围为[a,b],希望变换后图像g(x,y)的灰度范围扩展至[c,d],线性变换表示式为:g(x,y)=[(d-c)/(b-a)] f(x,y)+c此关系式可用图3-1表示。

若图像中大部分象素的灰度级分布在区间[a,b],很小部分的灰度级超出了此区间,为改善增强的效果,可令:c 0< f(x,y)<ag(x,y)= [(d-c)/(b-a)] f(x,y)+c a≤ f(x,y)≤bd b< f(x,y)< F max其中F max为输入图像的最大灰度值。

图3-1 灰度范围线性变换(2)分段线性变换为了突出感兴趣的目标或灰度区间,相对抑制那些不感兴趣的目标或灰度区间,常采用分段线性变换法。

常用的是三段线性变换法,如图3-2所示,其数学表达式为:(c/a)f(x,y) 0<f(x,y)<ag(x,y)= [(d-c)/(b-a)]f(x,y)+c a≤f(x,y)≤b[(G max-d)/(F max-b)][f(x,y)-b+d] b<f(x,y)≤F max图中对灰度区间[a,b]进行了线性变换,而灰度区间[0,a] [b,F max]受到了压缩。

图像增强技术—灰度变换及应用实例

图像增强技术—灰度变换及应用实例
• 2.1 线性灰度度变换
就是按照线性函数的映射关系对灰度进行变换,图 像取反、增加或者减小对比度、增加或者减小亮度都是 灰度线性变换的一种。
下图是用halcon做的图像取反的灰度变换。
原 图
灰 度 直



反Байду номын сангаас



化 后
后 的 灰







2.2 非线性灰度变换
非线性灰度变换就是构造一种非线性映射函数常见的变换有 :对数变换、指数变换等。比如说:对数变换主要就是低灰度区扩展, 高灰度区压缩;灰度变换除了线性变换,非线性变换,还有分段线 性变换:这个主要是为了突出感兴趣的部位。下图为以10为底的对 数变换图像。
乳腺原图
去除部分背景后的图
采用了分段线性灰度变换突出乳腺信息。第二个峰值为乳腺信息,选取 两个转折点(80,20)(150,240),把乳腺的灰度值范围扩大, 实现了突出兴趣部位信息需求。
4 总结
灰度变换主要就是把原像素的值做了一个重新分 配来提高对比度,灰度变换很重要的一部分就是参 数的选择,可以在原有的算法的基础上进行改进, 得到自己更加需要的图像。
图像增强技 术—灰度变换
1 灰度变换的简单介绍

灰度变换是图像处理中的一个基本最基本技术技术之一,它
进行的是点运算,就是直接对像素点的值进行运算。灰度变换也是
图像增强技术中一种非常基础直接的空间域图像处理方式,根据自
的需要对图像进行灰度变换增强,增加对比度、突出感兴趣的区域
都是可以的。
2 常见的灰度变换
原 图
灰 度 直


指 数

4-1、图像增强之灰度变换和彩色增强

4-1、图像增强之灰度变换和彩色增强

g=9*log(f+1)
作用:将暗的部分扩展,而将亮的部分抑制。(示例)
4、直方图均衡化
直方图均衡方法的基本思想是对 在图像中像素个数多的灰度级进行展 宽,而对像素个数少的灰度级进行缩 减。从而达到清晰图像的目的。 用以改变图像整体偏暗或整体偏亮, 灰度层次不丰富的情况,将直方图的 分布变成均匀分布
2、 对比度展宽(灰度线性变换)
一、对比度展宽的目的:
是一点对一点的灰度级的影射。设新、旧图的 灰度级分别为g和f,g和f 均在[0,255]间变化。 实质是旧图到新图的灰度级的逐点映射。 g=G(f) 目的:将人所关心的部分强调出来。 特点:变换前后像素个数不变,但不同像素之间的 灰度差变大,对比度加大,视觉效果增强gγຫໍສະໝຸດ 255gbβ
ga
β
α
a b 255
f
a
b 255
f
2、对比度展宽 三、灰级窗切片:
只保留感兴趣的部分,其余部分置为 0。如: 0
g
255
a
b
255
f
2、对比度展宽
四、二值化图像: 可将多灰度的图像转换成黑白二值 图像;方法是对图像取一阈值,大 于该阈值的像素赋予灰度1,小于该 阈值的像素赋予灰度0
I ( x, y) e( x, y) g ( x, y)
g ( x, y) e ( x, y) I ( x, y)
1
1、灰度级的修正
灰度级修正的方法: (1)先用该系统对一已知亮度均匀的图像进行 记录,得到一个实际的“非均匀曝光”的图像, 求得是图像发生畸变的比例因子 (2)当用同一系统对其他图像进行记录时,便 可通过该比例因子求出理想图像
51

Python图像运算之图像灰度线性变换详解

Python图像运算之图像灰度线性变换详解

Python图像运算之图像灰度线性变换详解⽬录⼀.灰度线性变换⼆.图像灰度上移变换三.图像对⽐度增强变换四.图像对⽐度减弱变换五.图像灰度反⾊变换六.总结⼀.灰度线性变换图像的灰度线性变换是通过建⽴灰度映射来调整原始图像的灰度,从⽽改善图像的质量,凸显图像的细节,提⾼图像的对⽐度。

灰度线性变换的计算公式如(12-1)所⽰:该公式中DB表⽰灰度线性变换后的灰度值,DA表⽰变换前输⼊图像的灰度值,α和b为线性变换⽅程f(D)的参数,分别表⽰斜率和截距[1-4]。

当α=1,b=0时,保持原始图像当α=1,b!=0时,图像所有的灰度值上移或下移当α=-1,b=255时,原始图像的灰度值反转当α>1时,输出图像的对⽐度增强当0<α<1时,输出图像的对⽐度减⼩当α<0时,原始图像暗区域变亮,亮区域变暗,图像求补如图12-1所⽰,显⽰了图像的灰度线性变换对应的效果图。

⼆.图像灰度上移变换该算法将实现图像灰度值的上移,从⽽提升图像的亮度。

DB=DA+50具体实现代码如下所⽰。

由于图像的灰度值位于0⾄255区间之内,所以需要对灰度值进⾏溢出判断。

# -*- coding: utf-8 -*-# By:Eastmountimport cv2import numpy as npimport matplotlib.pyplot as plt#读取原始图像img = cv2.imread('luo.png')#图像灰度转换grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#获取图像⾼度和宽度height = grayImage.shape[0]width = grayImage.shape[1]#创建⼀幅图像result = np.zeros((height, width), np.uint8)#图像灰度上移变换 DB=DA+50for i in range(height):for j in range(width):if (int(grayImage[i,j]+50) > 255):gray = 255else:gray = int(grayImage[i,j]+50)result[i,j] = np.uint8(gray)#显⽰图像cv2.imshow("Gray Image", grayImage)cv2.imshow("Result", result)#等待显⽰cv2.waitKey(0)cv2.destroyAllWindows()其输出结果如图12-2所⽰,图像的所有灰度值上移50,图像变得更⽩了。

各灰度级的变换函数值sk公式

各灰度级的变换函数值sk公式

各灰度级的变换函数值sk公式在数字图像处理中,图像的灰度级是指像素点的亮度强度的级别,通常以0-255的数字表示。

图像灰度级的变换函数值sk是指将原始图像中的一个灰度级映射到另一个灰度级时,所需要的函数值。

灰度级变换是数字图像处理中常用的操作之一,其主要作用是改变图像的亮度、对比度、色彩等特征,从而使图像更加清晰、鲜艳、易于识别和处理。

不同的图像灰度级变换函数可以产生不同的效果,因此在实际应用中需要根据具体的需求选择适当的函数。

下面我们将详细介绍各灰度级的变换函数值sk公式,以及它们的作用和应用场景:1. 线性变换函数线性变换函数是最常用的一种灰度级变换函数,其公式为:s_k = [(L-1)/(H-L)]*(r_k-L)其中,L和H分别表示原始图像灰度级的最小值和最大值,r_k表示原始图像的像素值,s_k表示变换后的像素值。

线性变换函数的作用是增加或减小图像的对比度,使图像更加清晰、鲜明。

它常用于图像增强、亮度调整和对比度调整等操作中。

2. 对数变换函数对数变换函数的公式为:s_k = c * log(1+r_k)其中,c为常数,r_k和s_k的含义同上。

对数变换函数的主要作用是扩展暗部细节,减少高光区域的亮度,从而达到良好的曝光平衡。

它常用于夜间拍摄或者对内部细节有特殊需求的图像处理中。

3. 幂律变换函数幂律变换函数的公式为:s_k = c * r_k^γ其中,c为常数,γ为幂律指数,r_k和s_k的含义同上。

幂律变换函数的主要作用是突出图像细节、增加图像对比度和色彩饱和度,使图像更加明亮鲜艳。

它适用于各种类型的图像处理,尤其是自然景观、建筑和人像等领域。

4. 反转变换函数反转变换函数的公式为:s_k = L-1-r_k其中,L为原始图像的灰度级最大值,r_k和s_k的含义同上。

反转变换函数的作用是颠倒图像亮度的分布,使原来的暗区变为明区,明区变为暗区,从而产生强烈的视觉反差。

它常用于黑白摄影、动画和游戏制作等领域。

图像灰度变换 原理

图像灰度变换 原理

图像灰度变换原理
图像灰度变换是一种图像处理的方法,通过改变图像的灰度级别来增强或调整图像的显示效果。

其原理是对图像中的每个像素点进行灰度级别的转换。

常用的灰度变换函数有线性灰度变换、非线性灰度变换和直方图均衡化。

线性灰度变换是指通过线性映射将原图像的灰度级别转换为新的灰度级别。

常见的线性灰度变换函数有平移、缩放和对比度调整。

平移是将当前灰度级别加上一个偏移量,从而改变整个图像的亮度。

缩放是将灰度级别乘上一个缩放因子,从而调整图像的对比度。

对比度调整是通过同时进行平移和缩放,改变图像的亮度和对比度。

非线性灰度变换是指通过非线性函数将原图像的灰度级别转换为新的灰度级别。

常见的非线性灰度变换函数有幂律变换和对数变换。

幂律变换是通过对原图像的每个像素点进行幂次运算,从而调整图像的亮度和对比度。

对数变换是将原图像的灰度级别取对数,从而改变图像的亮度和对比度。

直方图均衡化是一种将原图像的灰度级别映射到均匀分布的灰度级别上的方法。

其原理是通过计算原图像的灰度直方图,并根据直方图进行灰度级别的重新分布。

这样可以增强图像的对比度和细节,并改善图像的视觉效果。

通过灰度变换,可以调整图像的亮度、对比度、色彩等特性,从而改善图像的视觉效果、增强图像的细节和信息。

在图像处
理和计算机视觉领域,灰度变换是一种常用的图像增强和预处理方法。

灰度线性变换

灰度线性变换

灰度线性变换
灰度线性变换(Gray-Level Linear Transformation, GLT)是一种常用的图像处理技术,可以通过线性变换来改变图像的亮度和对比度。

一般来说,每个像素的灰度都是由一个介于0到255之间的整数确定的,分别对应黑色和白色。

灰度线性变换就是通过改变灰度值的映射关系,来调整图像的亮度和对比度。

灰度线性变换的原理可以用以下直观的公式来描述:
g(x,y)=T(f(x,y)) 其中,T(x1)是为每个亮度值x1所设置的新的亮度值;
f(x,y)表示原图像的每个像素点;
一般来说,变换函数T(x1)可以用一次函数来描述,即 T(x1)=ax1+b (其中,a,b 为实数常量),由此可知,a的取值范围在0-1之间,表示图像亮度的比例; b的取值范围为0-255,表示图像的偏移量。

正如我们所知,灰度线性变换的优点是可以简单、快速地调整图像的亮度和对比度。

缺点是它不能改变图像的分布特征,只能做一些简单的变换,而不能实现图像的特定效果处理,比如拉伸度和畸变处理等。

因此,灰度线性变换通常只用于处理图像的简单变换,比如调整图像的亮度和对比度的需求,或者在彩色图像转换为灰度图像的过程中。

一般来说,使用灰度线性变换容易实现,而且对于一些常用的算法有很好的效果,所以经常被用来处理图像。

灰度变换算法原理

灰度变换算法原理

灰度变换算法原理
灰度变换是一种将图像的灰度级进行适当调整的方法,可以改善图像的对比度和亮度。

灰度变换的基本原理是将输入图像的每个像素点的灰度级通过某种函数进行映射转换,并得到输出图像的像素灰度级。

常用的灰度变换函数有线性变换、非线性变换和直方图均衡化等。

1. 线性变换:
线性变换是灰度变换中最简单的一种方法。

它通过一个线性函数将输入图像的灰度级映射到输出图像的灰度级。

线性变换的数学表达式为:
g(x,y) = a*f(x,y) + b
其中,g(x,y)为输出图像的像素灰度级,f(x,y)为输入图像的像素灰度级,a和b为常数。

2. 非线性变换:
非线性变换是通过非线性函数将输入图像的灰度级映射到输出图像的灰度级。

非线性变换可以对输入图像的不同灰度级进行不同的映射处理,从而调整图像的对比度和亮度。

常用的非线性变换函数有幂次变换、对数变换和指数变换等。

3. 直方图均衡化:
直方图均衡化是一种通过对输入图像的直方图进行变换,从而使得输出图像具有更均匀的灰度分布的方法。

通过直方图均衡化,可以增强图像的对比度,使得图像中细节更加清晰。

直方图均衡化的基本原理是将输入图像的累计分布函数映射到均匀
分布,使得输出图像的直方图近似均匀。

总结起来,灰度变换算法原理是通过对输入图像的灰度级进行适当调整,使用线性变换、非线性变换,或者直方图均衡化等方法,从而改变输出图像的灰度级,达到调整图像对比度和亮度的目的。

图像灰度变换、二值化、直方图

图像灰度变换、二值化、直方图

图像灰度变换、⼆值化、直⽅图1、灰度变换1)灰度图的线性变换Gnew = Fa * Gold + Fb。

Fa为斜线的斜率,Fb为y轴上的截距。

Fa>1 输出图像的对⽐度变⼤,否则变⼩。

Fa=1 Fb≠0时,图像的灰度上移或下移,效果为图像变亮或变暗。

Fa=-1,Fb=255时,发⽣图像反转。

注意:线性变换会出现亮度饱和⽽丢失细节。

2)对数变换t=c * log(1+s)c为变换尺度,s为源灰度,t为变换后的灰度。

对数变换⾃变量低时曲线斜率⾼,⾃变量⼤时斜率⼩。

所以会放⼤图像较暗的部分,压缩较亮的部分。

3)伽马变换y=(x+esp)γ,x与y的范围是[0,1], esp为补偿系数,γ为伽马系数。

当伽马系数⼤于1时,图像⾼灰度区域得到增强。

当伽马系数⼩于1时,图像低灰度区域得到增强。

当伽马系数等于1时,图像线性变换。

4)图像取反⽅法1:直接取反imgPath = 'E:\opencv_pic\src_pic\pic2.bmp';img1 = imread(imgPath); % 前景图img0 = 255-img1; % 取反景图subplot(1,2,1),imshow(img1),title('原始图像');subplot(1,2,2),imshow(img0),title('取反图像');⽅法2:伽马变换Matlab:imadjust(f, [low_in, high_in], [low_out, high_out], gamma)[low_in, high_in]范围内的数据映射到 [low_out, high_out],低于low的映射到low_out, ⾼于high的映射到high_out. imgPath = 'E:\opencv_pic\src_pic\pic2.bmp';img1 = imread(imgPath); % 前景图img0 = imadjust(img1, [0,1], [1,0]);subplot(1,2,1),imshow(img1),title('原始图像');subplot(1,2,2),imshow(img0),title('取反图像');2、⼆值化1)rgb2gray⼀般保存的灰度图是24位的灰度,如果改为8bit灰度图。

OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

OpenCV计算机视觉学习(3)——图像灰度线性变换与⾮线性变换(对数变换,伽马变换)如果需要处理的原图及代码,请移步⼩编的GitHub地址 传送门: 下⾯主要学习图像灰度化的知识,结合OpenCV调⽤ cv2.cvtColor()函数实现图像灰度化,使⽤像素处理⽅法对图像进⾏灰度化处理。

1. 图像灰度化1.1 图像灰度化的⽬的 将彩⾊图像转化为灰度图像的过程是图像的灰度化过程。

彩⾊图像中的每个像素的颜⾊由 R, G, B三个分量决定,⽽每个分量中可以取值 0~255,这样⼀个像素点可以有 1600多万(255*255*255=16581375)的颜⾊的变化范围。

⽽灰度图像是 R,G,B三个分量相同的⼀种特殊的彩⾊图像,其中⼀个像素点的变换范围为 256 种,所以在数字图像处理中⼀般将各种格式的图像转换为灰度图像以使后续的图像计算量少⼀些。

灰度图像的描述与彩⾊图像⼀样仍然反映了整幅图像的整体和局部的⾊度和⾼亮等级的分布和特征。

1.2 图像灰度化原理 图像灰度化是将⼀幅彩⾊图像转换为灰度化图像的过程。

彩⾊图像通常包括R、G、B三个分量,分别显⽰出红绿蓝等各种颜⾊,灰度化就是使彩⾊图像的R、G、B三个分量相等的过程。

灰度图像中每个像素仅具有⼀种样本颜⾊,其灰度是位于⿊⾊与⽩⾊之间的多级⾊彩深度,灰度值⼤的像素点⽐较亮,反之⽐较暗,像素值最⼤为255(表⽰⽩⾊),像素值最⼩为0(表⽰⿊⾊)。

图像灰度化核⼼思想是 R = G = B ,这个值也叫灰度值。

上表中Gray表⽰灰度处理之后的颜⾊,然后将原始RGB(R,G,B)颜⾊均匀地替换成新颜⾊RGB(Gray,Gray,Gray),从⽽将彩⾊图⽚转化为灰度图像。

⼀种常见的⽅法是加权平均灰度处理,这种效果是最好的。

是将RGB三个分量求和再取平均值,但更为准确的⽅法是设置不同的权重,将RGB分量按不同的⽐例进⾏灰度划分。

⽐如⼈类的眼睛感官蓝⾊的敏感度最低,敏感最⾼的是绿⾊,因此将RGB按照0.299、0.587、0.114⽐例加权平均能得到较合理的灰度图像,如公式所⽰:1.3 图像灰度化的三种⽅法1.3.1 OpenCV直接灰度化 下⾯的这种⽅法,在读取图⽚的时候,直接将图⽚转化为灰度化:import cv2img = cv2.imread(photo_file, cv2.IMREAD_GRAYSCALE) 得到的img是⼀个函数。

灰度线性变换

灰度线性变换

灰度线性变换
灰度线性变换是一种用于MCU图像增强处理的常用方法。

它是把图像
的每个像素点的灰度值从原始灰度级映射到新的灰度级,实现对图像亮度、对比度等特性进行调节,以达到增强图像质量的目的。

灰度线性变换的基
本形式是:s=a*r+b,其中,s、r分别表示图像灰度变化后和变化前的灰
度值,a、b分别为变化系数。

灰度线性变换的过程依赖于变换参数a、b的选取,a的取值范围是0
至1,表示变换的量度程度,也就是变化的幅度;而b的取值范围是0至255,表示变换的量度偏移,也就是亮度上的平衡值。

如果a取值大于1,就会使图像变得更亮,a取值小于1时,图像就会变暗;如果b取值大于1,则图像会变亮;反之,图像就变暗。

通过选择合适的变换参数,就可以实现灰度线性变换,使图像质量得
到提升。

此外,灰度线性变换还可以被用来增强图像的对比度,提高图像
的色彩饱和度,从而达到更好的视觉效果。

数字图像灰度图像二值化实验报告matlab实现1

数字图像灰度图像二值化实验报告matlab实现1

数字图像灰度图像二值化实验报告matlab实现数字图像处理实验报告实验二灰度图像的二值化处理学号姓名日期实验二灰度图像的二值化处理一、实验目的图像二值化是数字图像处理技术中的一项基本技术,二值化图像的显示与打印十分方便,存储与传输也非常容易,在目标识别、图像分析、文本增强、字符识别等领域得到广泛应用。

图像二值化是将灰度图像转化为只有黑白两类像素的图像,大多采用阈值化算法处理。

在不同的应用中,阈值的选取决定着图像特征信息的保留。

因此,图像二值化技术的关键在于如何选取阈值。

二、实验内容1、编程绘制数字图像的直方图。

2、灰度图像二值化处理。

三、实验要求1、自己选择灰度图像。

2、选择多种阈值分割算法,并比较和分析图像二值化处理的结果。

3、使用VC++编程序。

四、设计思想(阈值选取算法)灰度图像是指只含亮度信息,不含色彩信息的图像,将彩色图像转化成为灰度图像的过程称为图像的灰度化处理。

图像的二值化处理就是将图像上的点的灰度置为0或255,也就是使整个图像呈现出明显的黑白效果。

即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。

阀值分割选取算法有:典型的全局阀值算法的Otsu 算法、局部阀值方法中的Bersen算法、灰度拉伸法、直方图方法等等。

1.Otsu算法的设计思想:设阀值将图像分割成两组,一组灰度对应目标,另一组灰度对应背景,则这两组灰度值的类内方差最小,两组的类间方差最大。

对图像设阈值将图像分割成两组,一组灰度对应目标,另一组灰度对应背景,则这两组灰度值的类内方差最小,两组的类间方差最大。

2.Bersen算法的设计思想:把灰度阈值选取为随像素位置变化而变化的函数,它是一种动态选择阈值的自适应方法。

3.灰度拉伸算法设计思想:灰度拉伸又叫对比度拉伸,它是最基本的一种灰度变换,使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围。

4.直方图算法的设计思想:把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

灰度变换之灰度线性拉伸(算法1)

灰度变换之灰度线性拉伸(算法1)

灰度变换之灰度线性拉伸(算法1)第⼀部分:分段(线性变换)函数摘⾃百度百科:灰度拉伸⼜叫:拉伸,它是最基本的⼀种变换,算法:使⽤的是最简单的分段函数,它的主要思想是提⾼图像处理时的。

它可以有选择的拉伸某段灰度区间以改善输出图像。

如图,所⽰的变换函数的运算结果是将原图在a 到b 之间的灰度拉伸到c 到d之间。

如果⼀幅图像的灰度集中在较暗的区域⽽导致图像偏暗,可以⽤灰度拉伸功能来拉伸(>1)物体灰度区间以改善图像;同样如果集中在较亮的区域⽽导致图像偏亮,也可以⽤灰度拉伸功能来压缩(斜率<1)物体灰度区间以改善。

原理:函数表达式第⼆天睡饱了再看这个函数是如何构造的:选取了四个点(0,0) (x1,y1) (x2,y2) (255,255)先计算斜率然后再点斜式,(x1,y1) (x2,y2)⾃⼰设定然后可以不断调整整个函数的图像。

分段函数的图像表达式:代码:12345678function out = MySegmentLinear(I,x1,x2,y1,y2)%功能:实现灰度图像的分段线性变换%理论基础:/s/1dFoFuSD %输⼊参数I 是uint8类型的灰度图像数据; I=im2double(I);[M,N] = size(I);out = zeros(M,N);8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25out = zeros(M,N);for i=1:Mfor j=1:Nif I(i,j)<x1out(i,j) = y1 * I(i,j) / x1;elseif I(i,j)>x2out(i,j) = (I(i,j)-x2)*(1-y2)/(1-x2) + y2; elseout(i,j) = (I(i,j)-x1)*(y2-y1)/(x2-x1) + y1; endendendout=255.*out;out=uint8(out);end第⼆部分:RGB分别提取出3个图像出来_________________________________________________________________________________________________1. >> image = imread('D:\example.jpg');2. >> image_r=image(:,:,1);3. >> image_g=image(:,:,2);4. >> image_b=image(:,:,3);5. >> zero = zeros(size(image_r));6. >> R=cat(3,image_r,zero,zero);7. >> G=cat(3,zero,image_g,zero);8. >> B=cat(3,zero,zero,image_b);9. >> RGB=cat(3,image_r,image_g,image_b);10. >> subplot(2,2,1),imshow(image_r),title('Red component');11. >> subplot(2,2,2),imshow(image_g),title('green component');12. >> subplot(2,2,3),imshow(image_g),title('blue component');13. >> subplot(2,2,4),imshow(RGB),title('original image');第三部分:彩⾊图像对⽐度增强image = imread('90.jpg'); %读取⼀个图⽚image_r=image(:,:,1); %提取分量组成的图⽚image_g=image(:,:,2);image_b=image(:,:,3);Sp_r=MySegmentLinear(image_r,0.3,0.7,0.00,1.00); %R分量组成的图⽚进⾏对⽐度拉伸Sp_g=MySegmentLinear(image_g,0.3,0.7,0.00,1.00);Sp_b=MySegmentLinear(image_b,0.3,0.7,0.00,1.00);RGB=cat(3,Sp_r,Sp_g,Sp_b);imshow(RGB);效果:原图:。

数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)

数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)

数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)总结性的⼀篇博⽂,内容其实很简单,之所以写出来是为了对⾃⼰之前所学做⼀些总结。

参考⾃:《数字图像处理》--第三版--冈萨勒斯--中,以及师兄提供的参考资料,在此对师兄表⽰感谢。

空间域处理是直接对像素进⾏操作的⽅法,这是相对于频率域处理⽽⾔的。

空间域处理主要分为两⼤类:灰度变换和空间滤波。

灰度变换在图像单个像素上操作,主要以对⽐度和阈值处理为⽬的。

空间滤波涉及改善性能的操作,通过像元领域来处理。

空间域处理均可由下式表达:表⽰f(x, y)输⼊图像,g(x,y)表⽰输出图像,T 是变换算⼦(数学规则)灰度变换可以看作领域⼤⼩为1*1的空间域处理,这这种情况下上式变为灰度变换函数:r和s分别为输⼊、输出灰度基本的灰度变换函数常⽤的基本函数有三类:线性函数,对数函数(对数和反对数)和幂律函数(n次幂和n次根)图像反转适⽤于增强嵌⼊在⼀幅图像暗区域中的⽩⾊或灰⾊细节。

变换公式为:图像灰度级范围为[0,L-1]"""反转变换"""import numpy as npimport cv2import matplotlib.pyplot as pltdef reverse(img):output = 255 - imgreturn outputimg1 = cv2.imread(r'F:\program_study\Python\data\breast.tif') # 前头加r是消除反斜杠转义cv2.imshow('input', img1)x = np.arange(0, 256, 0.01)y = 255 - xplt.plot(x, y, 'r', linewidth=1)plt.title('反转变换函数图')plt.xlim([0, 255]), plt.ylim([0, 255])plt.show()img_output = reverse(img1)dWindow('output', cv2.WINDOW_NORMAL) # 可改变窗⼝⼤⼩cv2.imshow('output', img_output)cv2.waitKey(0)cv2.destroyAllWindows()反转变换对数变换对数变换可以拉伸范围较窄的低灰度值,同时压缩范围较宽的⾼灰度值。

数字图像处理:图像的灰度变换(Matlab实现)

数字图像处理:图像的灰度变换(Matlab实现)

数字图像处理:图像的灰度变换(Matlab实现)(1)线性变换:通过建⽴灰度映射来调整源图像的灰度。

k>1增强图像的对⽐度;k=1调节图像亮度,通过改变d值达到调节亮度⽬的;0i = imread('theatre.jpg');i = im2double(rgb2gray(i));[m,n]=size(i);%增加对⽐度Fa = 1.25; Fb = 0;O = Fa.*i + Fb/255;figure(1), subplot(221), imshow(O);title('Fa = 1.25, Fb = 0, contrast increasing');figure(2),subplot(221), [H,x]=imhist(O, 64);stem(x, (H/m/n), '.');title('Fa = 1.25, Fb = 0, contrast increasing');%减⼩对⽐度Fa =0.5; Fb = 0;O = Fa.*i + Fb/255;figure(1), subplot(222),imshow(O);title('Fa = 0.5, Fb = 0, contrast decreasing');figure(2), subplot(222), [H,x] = imhist(O, 64);stem(x, (H/m/n), '.');title('Fa = 0.5, Fb = 0, contrast decreasing');%线性亮度增加Fa = 0.5; Fb = 50;O = Fa.*i + Fb/255;figure(1), subplot(223), imshow(O);title('Fa = 0.5, Fb = 50, brightness control');figure(2), subplot(223), [H,x]=imhist(O,64);stem(x, (H/m/n), '.');title('Fa = 0.5, Fb = 50, brightness control');%反相显⽰Fa = -1; Fb = 255;O = Fa.*i + Fb/255;figure(1), subplot(224), imshow(O);title('Fa = -1, Fb = 255, reversal processing');figure(2), subplot(224),[H,x]=imhist(O, 64);stem(x, (H/m/n), '.');title('Fa = -1, Fb = 255, reversal processing');(2)对数变换:增强低灰度,减弱⾼灰度值。

OpenCV图像处理之常见的图像灰度变换

OpenCV图像处理之常见的图像灰度变换

OpenCV图像处理之常见的图像灰度变换1.灰度线性变换图像的灰度线性变换是图像灰度变换的⼀种,图像的灰度变换通过建⽴灰度映射来调整源图像的灰度,从⽽达到图像增强的⽬的。

灰度映射通常是⽤灰度变换曲线来进⾏表⽰。

通常来说,它是将图像的像素值通过指定的线性函数进⾏变换,以此来增强或者来减弱图像的灰度,灰度线性变换的函数就是常见的线性函数。

g(x, y) = k · f(x, y) + d设源图像的灰度值为x,则进⾏灰度线性变换后的灰度值为y = kx + b (0<=y<=255),下⾯分别来讨论k的取值变化时线性变换的不同效果(1).|k|>1时当k>1时,可以⽤来增加图像的对⽐度,图像的像素值在进⾏变换后全部都线性⽅法,增强了整体的显⽰效果,且经过这种变换后,图像的整体对⽐度明显增⼤,在灰度图中的体现就是变换后的灰度图明显被拉伸了。

(2).|k|=1时当k=1时,这种情况下常⽤来调节图像的亮度,亮度的调节就是让图像的各个像素值都增加或是减少⼀定量。

在这种情况下可以通过改变d值来达到增加或者是减少图像亮度的⽬的。

因为当k=1,只改变d 值时,只有图像的亮度被改变了,d>0时,变换曲线整体发⽣上移,图像的亮度增加,对应的直⽅图整体向右侧移动,d<0时,变换曲线整体下移,图像的亮度降低,对应的直⽅图发⽣⽔平左移。

(3).0<|k|<1时此时变换的效果正好与k>1时相反,即图像的整体对⽐度和效果都被削减了,对应的直⽅图会被集中在⼀段区域上。

k值越⼩,图像的灰度分布也就越窄,图像看起来也就显得越是灰暗。

(4).k<0时在这种情况下,源图像的灰度会发⽣反转,也就是原图像中较亮的区域会变暗,⽽较暗的区域将会变量。

特别的,此时我们令k = -1,d = 255,可以令图像实现完全反转的效果。

对应的直⽅图也会发⽣相应的变化。

相应的程序试下如下://实现图像的灰度线性变化#include <iostream>#include <opencv2\core\core.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\imgproc\imgproc.hpp>using namespace std;using namespace cv;int main(){Mat srcImg = imread("1234.jpg");if (!srcImg.data){cout << "读⼊图⽚失败" << endl;return -1;}imshow("原图像", srcImg);double k, b;cout << "请输⼊k和b值:";cin >> k >> b;int RowsNum = srcImg.rows;int ColsNum = srcImg.cols;Mat dstImg(srcImg.size(), srcImg.type());//进⾏遍历图像像素,对每个像素进⾏相应的线性变换for (int i = 0; i < RowsNum; i++){for (int j = 0; j < ColsNum; j++){//c为遍历图像的三个通道for (int c = 0; c < 3; c++){//使⽤at操作符,防⽌越界dstImg.at<Vec3b>(i, j)[c] = saturate_cast<uchar>(k* (srcImg.at<Vec3b>(i, j)[c]) + b);}}}imshow("线性变换后的图像", dstImg);waitKey();return 0;}当k=1.2,b=50时执⾏程序的效果如下:2.灰度对数变换对数变换的基本形式为其中,b是⼀个常数,⽤来控制曲线的弯曲程度,其中,b越⼩越靠近y轴,b越⼤越靠近x轴。

灰度的线性变换

灰度的线性变换

灰度的线性变换功能:通过将图像中的所有的点的灰度按照线性灰度变换函数进⾏变换,最常见的线性变换就是反转。

算法:灰度的线性变换⽤到的线性灰度变换函数f(x)是⼀个⼀维线性函数:f(x) = kx + d,应⽤到图像上就带⼈各像素点的灰度值:Gd=f(Gs) = k*Gs + d;其中k为线性函数的斜率,d为线性函数在y轴的截距。

Gs表⽰输⼊图像的灰度,Gd表⽰输出图像的灰度。

当k>1时,输出图像的对⽐度将增⼤;当k<1时,输出图像的对⽐度将减⼩;当k=1且d≠0时,操作使所有的灰度值上移或下移,其效果是使整个图像变暗或变亮。

当k<0,暗区域将变亮,亮区域将变暗,点运算完成了图形求补运算。

特殊情况:1、当k=1,d=0时,输出图像与原图像相同。

2、当k=-1,d=255时,输出图像的灰度正好相反。

实现代码:for( int i=0; i<iPixelHeight; i++ ){for( int j=0; j<iPixelWidth; j++ ){//指向像素数据的第i⾏,第j列/个像素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight-1-i) + j; //lLineBytes * (lHeight-1-i) + j不懂fTemp = k*(*lpSrc) + d; //线性变换if( fTemp > 255 ){*lpSrc = 255;}else if ( fTemp<0 ){*lpSrc = 0}else{*lpSrc = (unsigned char)(fTemp+0.5); //四舍五⼊}}}所谓的饱和度,指的其实是⾊彩的纯度,纯度越⾼,表现越鲜明,纯度较低,表现则较黯淡,⾊饱和度表⽰光线的彩⾊深浅度或鲜艳度,取决于彩⾊中的⽩⾊光含量,⽩光含量越⾼,即彩⾊光含量就越低,⾊彩饱和度即越低,反之亦然。

灰度的线性变换

灰度的线性变换

3
计算原始直方图:
P(i) =
j
ni n
4
计算累积直方图: Pj = P(k)
k =0
0.19
0.44
0.65
0.81
0.89
0.95
0.98
1.00
5
计算变换后的灰度值:j = INT (L - 1)Pj + 0.5
1
3
5
6
6
7
7
7
6
确定灰度变换关系: i j
01
13
25
4.2
图像的直方图修正
◘ 直方图规定化(匹配)
直方图均衡化能自动增强整个图像对比度,结果得到全局均匀化 的直方图,但实际应用中有时要求突出感兴趣灰度范围,即修正直方 图使其具有要求的形式。

(a) k
d c 0 ba
(b)k
d c 0 ba
Digital Image Processing
4.1
图像的对比度增强
根据[a,b]和[c,d]的取值大小可有如下几种情况:
(1)扩展动态范围:若 [a, b] [c, d ] ,即 k 1 ,则结果会使图像灰度取值 的动态范围展宽,这样就可改善曝光不足的缺陷,或充分利用图像显示 设备的动态范围。 (2)改变取值区间:若 k 1 ,即 d c b a ,则变换后灰度动态范围 不变,但灰度取值区间会随a和c的大小而平移。
Digital Image Processing
4.1
g (m, n)
d
图像的对比度增强
g (m, n)
N
d
c
c
a b
f (m, n)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二灰度图像的线性变换一、实验目的1.了解灰度变换的基本原理;2.掌握线性变换处理的方法;3.利用VC编写图像线性变换处理的程序;4.在微机上调试程序。

二、实验原理灰度级修正是对图像在空间域进行增强的简单而效果明显的方法,根据图像降质不同的原因以及对图像特征的不同要求而采用不同的修正方法。

主要有灰度变换法和修正法。

它们是把原图像的灰度函数f(x,y)经过一个变换函数T(.)变换成一个新的图像函数g(x,y),即g(x,y)=T[f(x,y)]通过变换,达到对比度增强的效果,要注意在变换的过程中,对每一个象素(x,y)都经过了同样的处理,因此该方法又叫做点处理。

本实验完成灰度图像的线性变换处理。

1.灰度变换法一般成像系统只具有一定的亮度范围,亮度的最大值与最小值之比称为对比度。

由于形成图像的系统亮度有限,常出现对比度不足的弊病,使人眼观看图像时视觉效果很差,通过灰度变换法可以大大改善人的视觉效果。

灰度变换法又可分为三种:线性、分段线性及非线性变换。

(1)线性变换假定原图像f(x,y)的灰度范围为[a,b],希望变换后图像g(x,y)的灰度范围扩展至[c,d],线性变换表示式为:g(x,y)=[(d-c)/(b-a)] f(x,y)+c此关系式可用图3-1表示。

若图像中大部分象素的灰度级分布在区间[a,b],很小部分的灰度级超出了此区间,为改善增强的效果,可令:c 0< f(x,y)<ag(x,y)= [(d-c)/(b-a)] f(x,y)+c a≤ f(x,y)≤bd b< f(x,y)< F max其中F max为输入图像的最大灰度值。

图2-1 灰度范围线性变换(2)分段线性变换为了突出感兴趣的目标或灰度区间,相对抑制那些不感兴趣的目标或灰度区间,常采用分段线性变换法。

常用的是三段线性变换法,如图3-2所示,其数学表达式为:(c/a)f(x,y) 0<f(x,y)<ag(x,y)= [(d-c)/(b-a)](f(x,y)-a)+c a≤f(x,y)≤b [(G max-d)/(F max-b)][f(x,y)-b]+d b<f(x,y)≤F max图中对灰度区间[a,b]进行了线性变换,而灰度区间[0,a] [b,F max]受到了压缩。

通过细心调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行扩展或压缩。

这种变换适用于在黑色或白色附近有噪声干扰的情况。

例如照片中的划痕,由于变换后0~a以及b~F max之间的灰度受到压缩,因而使噪声干扰得到减弱。

图2-2 分段线性变换(3)非线性灰度变换当用某些非线性函数,例如用对数函数作为映射函数时,可实现图像灰度的非线性变换,对数变换的一般式为:g(x,y)=a+ln[f(x,y)+1]/(b*ln[c])这里a、b、c是便于调整曲线的位置和形状而引入的参数,它使低灰度范围的图像得以扩展而高灰度图像得到压缩,从而使图像的分布均匀与人的视觉特性相匹配。

指数变换的一般式为:g(x,y)=b c[f(x,y)-a]-1其中a、b、c三个参数用来调整曲线的位置和形状,它的效果与对数相反,它将对图像的高灰度区给予较大的扩展。

2.灰度图像的线性变换算法流程将灰度图像f(x,y)在区间[a,b]上的象素值,变换到区间[c,d](c<d)上。

a,b并不一定要求是f(x,y)的最小和最大灰度值,可以随意设定。

因此算法的功能是把输入图像的灰度区间[a,b] 变换到输出图像的灰度区间[c,d],也可把特定灰度值区间扩展到整个区间,即进行对比度伸展处理。

输入数组ii[Row][Col]=输入图像(灰度图像)输出数组oi[Row][Col]=输出图像(灰度图像)输入参数=变换前区间两端点输入参数=变换后区间两端点算法流程图如下:图2-3 图像的线性变换图像3.灰度图像的对数变换算法流程当灰度图像f的各象素点f(x,y)的值域在区间[a,b](a<b)上时,可将它按自然对数变换到区间[c,d](c<d)上,从而求得输出图像g。

因此算法的功能是把输入图像区间[a,b]对数变换到输出图像的灰度区间[c,d],灰度值为0时,用一个很小的数eps置换后再计算对数值。

输入数组ii[Row][Col]=输入图像输出数组oi[Row][Col]=输出图像输入参数=变换前区间两端点输入参数=变换后区间两端点算法流程图如下:图2-4 图像对数变换三、实验前准备1.预习本实验中关于图像灰度变换的基本原理;2.了解本实验的目的和实验内容。

四、实验内容1.根据图像线性变换处理的方法和流程,利用VC编写图像线性变换处理的程序;2.给定一幅BMP图像,用所编程序对给定图像进行操作,对图像处理后另存为(*.bmp)文件,并用Photoshop验证所编程序的正确性;3.本实验完成灰度的线性变换处理,如有时间再做灰度图像的对数变换。

五、实验报告要求1.总结图像变换处理的原理和方法;2.总结对图像线性变换处理编程的过程;3.总结用Photoshop验证所编写程序的过程。

4.对实验结果进行分析。

六、参考程序用VC打开试验一的程序,添加一对话框,ID为IDD_DLG_LINERTRANS,标题为线性变换。

在对话框中拖入四个编辑框IDC_EDIT_X1、IDC_EDIT_Y1、IDC_EDIT_X2、IDC_EDIT_Y12,在四个对话框前加入四个静态文本框,分别为第一点X坐标、第一点Y 坐标、第二点X坐标、第二点Y坐标,便于用户在该界面中输入线性变换曲线的两点坐标值。

插入新建对话框类,类名为CLinerTrans。

快捷键“Ctrl+W”打开MFC ClassWizard 对话框,给CLinerTrans加入MemberVarible,对应IDC_EDIT_X1、IDC_EDIT_Y1、IDC_EDIT_X2、IDC_EDIT_Y12分别加入int类型的变量m_X1、m_X2、m_Y1、m_Y2。

在DIBAPI.h中声明函数BOOL WINAPI LinerTrans(LPSTR lpDIBBits,LONG lWidth,LONG lHeight,int iX1,int iX2,int iY1,int iY2);在DIBAPI.cpp中定义该函数为:BOOL WINAPI LinerTrans(LPSTR lpDIBBits,LONG lWidth,LONG lHeight,int iX1,int iX2,int iY1,int iY2){unsigned char* lpSrc;LONG i;LONG j;LONG lLineBytes;LONG fTemp;LONG fBiex;lLineBytes=WIDTHBYTES(lWidth*8);for(i=0;i<lHeight;i++){for(j=0;j<lWidth;j++){lpSrc=(unsigned char*)lpDIBBits+lLineBytes*(lHeight-1-i)+j;fBiex=*lpSrc;if(iX1==0){fTemp=iY1;}else if(iX2==255){fTemp=iY2;}else if(fBiex>0&&fBiex<iX1){fTemp=fBiex*iY1/iX1;}else if(fBiex>=iX1&&fBiex<=iX2){//fTemp=fBiex*(iY2-iY1)/(iX2-iX1)+iY1;fTemp=(fBiex-iX1)*(iY2-iY1)/(iX2-iX1)+iY1;}else if(fBiex>iX2&&fBiex<=255){//fTemp=(fBiex+iY2-iX2)*(255-iY2)/(225-iX2);fTemp=iY2+(fBiex-iX2)*(255-iY2)/(225-iX2);}if(fTemp>255){*lpSrc=255;}else if(fTemp<0){*lpSrc=0;}else{*lpSrc=(unsigned char)(fTemp+0.5);}}}return TRUE;}在Resource View中打开Menu中的SHIYANTYPE,在Menu中加入“图像增强”工具按钮,在其下拉按钮中输入“线性变换”,并将其ID设为ID_LINERTRANS,在MFC ClassWizard对话框中加入OnLinertrans()消息函数。

编辑该函数加入如下代码:CShiyanDoc* pDoc=GetDocument();if(pDoc->m_hDIB==NULL){MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);return;}LPSTR lpDIB;LPSTR lpDIBBits;int X1,X2,Y1,Y2;lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());lpDIBBits=::FindDIBBits(lpDIB);if(::DIBNumColors(lpDIB)!=256){MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());return;}CLinerTrans dlgParam;if(dlgParam.DoModal()!=IDOK){return;}X1=dlgParam.m_X1;X2=dlgParam.m_X2;Y1=dlgParam.m_Y1;Y2=dlgParam.m_Y2;delete dlgParam;BeginWaitCursor();::LinerTrans(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB),X1,X2,Y1,Y2);pDoc->SetModifiedFlag(TRUE);pDoc->UpdateAllViews(NULL);::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());EndWaitCursor();注意:要在CShiyanDoc中头部加入#include "LinerTrans.h"语句。

相关文档
最新文档