图像处理幂律变换_数字图像处理中的幂律变换matalb - CSDN
  • 图像伽马变化的基本形式为: ... 伽马变换可以很好地拉伸图像的对比度,扩展灰度级。由图可知,当图像的整体灰度偏暗时,选择y 增亮;当图像整体灰度偏亮时,选择y>1,可以使图像变暗,提高图像的对比度,凸显细节。

        图像伽马变化的基本形式为:

                                                                s=cr^y


       伽马变换可以很好地拉伸图像的对比度,扩展灰度级。由图可知,当图像的整体灰度偏暗时,选择y<1,可以使图像

    增亮;当图像整体灰度偏亮时,选择y>1,可以使图像变暗,提高图像的对比度,凸显细节。

    展开全文
  • 图像幂律变换处理,当γ取值(0,1)可以将图像较暗的灰度值映射到更大的灰度值,同时较亮部分变化较小;γ取值(1,+∞)可以将较亮部分映射到更低的亮度,而更暗的部分变化较小。 处理彩色图像,只需要将RGB...

            幂律(伽马)变换公式:s = cr^\gamma,γ取值范围(0,+∞)

            对图像做幂律变换处理,当γ取值(0,1)可以将图像较暗的灰度值映射到更大的灰度值,同时较亮部分变化较小;γ取值(1,+∞)可以将较亮部分映射到更低的亮度,而更暗的部分变化较小。

            处理彩色图像,只需要将RGB取出,分别进行幂律变换即可。公式中,c可以取值255,r = a/255,a为像素上RGB分量之一,那么整个公式的取值范围为(0,255),不考虑计算过程的四舍五入的话,幂律变换的操作是可逆的。

    实现代码如下:

    public void gammaTranverse(BufferedImage image, double param) {
    		for (int i = 0; i < image.getWidth(); i++) {
    			for (int j = 0; j < image.getHeight(); j++) {
    
    				// 将rgb转换为各个值
    				int rgb = image.getRGB(i, j);
    				double R = (rgb >> 16) & 0xff;
    				double G = (rgb >> 8) & 0xff;
    				double B = rgb & 0xff;
    
    				// 进行伽马变换
    				R = 255 * Math.pow(R / 255, param);
    				G = 255 * Math.pow(G / 255, param);
    				B = 255 * Math.pow(B / 255, param);
    				// 将值转换为rgb
    				rgb = ((clamp(255) & 0xff) << 24) | ((clamp((int) R) & 0xff) << 16) | ((clamp((int) G) & 0xff) << 8)
    						| ((clamp((int) B) & 0xff));
    				image.setRGB(i, j, rgb);
    			}
    		}
    	}

    测试结果:

    1、原图。这是一张光线暗到几乎很难直接看到地面物体的航拍影像。通过幂律变换进行处理,增强较暗影像。

    2、γ取值为0.4,通过幂律变换处理后效果,可以看到影像增强效果非常明显,影像大部分区域由几乎不可见变得可见。

    3、这是一幅光线比较强,且受到云雾干扰的影像。

    4、γ取值为2处理后效果,影像整体变暗,但对比度更明显,受光线和云雾干扰造成的泛白现象减弱,整体视觉效果有所提升。

    展开全文
  • 对数变换: CImg&lt;int&gt; SrcImg; SrcImg.load_tiff("E:/Desktop/picture_process/Lenna/3/Fig0305(a)(DFT_no_log).tif"); SrcImg.display(); cimg_forXY(SrcImg, x, y) { SrcImg(x, y) = int...

    对数变换:

    CImg<int> SrcImg;
    SrcImg.load_tiff("E:/Desktop/picture_process/Lenna/3/Fig0305(a)(DFT_no_log).tif");
    SrcImg.display();
    cimg_forXY(SrcImg, x, y) {
    	SrcImg(x, y) = int(log(double(SrcImg(x, y)) + 1));
    }
    SrcImg.display();
    

    运行效果:
    在这里插入图片描述

    在这里插入图片描述

    幂律变换

    CImg<int> SrcImg;
    SrcImg.load_tiff("E:/Desktop/picture_process/Lenna/3/Fig0308(a)(fractured_spine).tif");
    SrcImg.display();
    double t[3] = { 0.6,0.4,0.3 };
    for (int i = 0; i < 3; i++) {
    	CImg<int> img = SrcImg;
    	cimg_forXY(img, x, y) {
    		img(x, y) = int(pow(double((img(x, y))), t[i]));
    	}
    	img.display();
    }
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    比特面分层

    CImg<int> img;
    	img.load_tiff("E:/Desktop/picture_process/Lenna/3/Fig0314(a)(100-dollars).tif");
    	img.display("原图");
    	int w = img.height();
    	int h = img.width();
    	CImg<int> p1(h,w,1,1), p2(h, w, 1, 1), p3(h, w, 1, 1), p4(h, w, 1, 1), p5(h, w, 1, 1), p6(h, w, 1, 1), p7(h, w, 1, 1), p8(h, w, 1, 1);
    	cimg_forXY(img, x, y) {
    		int num = img(x, y);
    		int *bit = binary(num);
    		p1(x, y) = fx(bit[0]); p2(x, y) = fx(bit[1]); p3(x, y) = fx(bit[2]); p4(x, y) = fx(bit[3]);
    		p5(x, y) = fx(bit[4]); p6(x, y) = fx(bit[5]); p7(x, y) = fx(bit[6]); p8(x, y) = fx(bit[7]);
    	}
    	p8.display("第八层比特图");
    	p7.display("第七层比特图");
    	p6.display("第六层比特图");
    	p5.display("第五层比特图");
    	p4.display("第四层比特图");
    	p3.display("第三层比特图");
    	p2.display("第二层比特图");
    	p1.display("第一层比特图");
    }
    //用于对图片进行黑白的赋值
    int fx(int n) {
    	if (n == 1)
    		return 255;
    	else
    		return 0;
    }
    //用于进行二进制转化的函数
    int* binary(int num) {
    	int *bit;
    	bit = new int[8];
    	for (int i = 0; i < 8; i++) {
    		bit[i] = 0;
    	}
    	int i = 0;
    	while (num) {
    		bit[i] = num % 2;
    		num /= 2;
    		i++;
    	}
    	return bit;
    }
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    均衡化处理

    • CImg有专门显示密度分布直方图的histogram函数
    	CImg<int> hist = img.histogram(256, 0, 255); //histogram的第一个参数是共有256个灰度级,第二个参数是灰度的最小值,第三个是灰度最大值
    	hist.display_graph();
    
    	CImg<int> img;
    	img.load_tiff("E:/Desktop/picture_process/Lenna/3/Fig0316(4)(bottom_left).tif");
    	CImg<int> pic = img;
    	img.display("处理前图片");
    	int size = img.size();
    	CImg<int> hist = img.histogram(256, 0, 255); //histogram的第一个参数是共有256个灰度级,第二个参数是灰度的最小值,第三个是灰度最大值
    	hist.display_graph("处理前直方图");
    	double sum = 0.0;
    	map<int, int> index;
    	for (int i = 0; i < 256; i++) {
    		sum += (double) hist(i)/size;
    		int Sum = (int)(sum * 255);
    		index.insert(pair<int, int>(i, Sum));
    	}
    	//map<int, int>::iterator iter = index.begin();
    	//map<int, int>::iterator end = index.end();
    	/*for (; iter != end; iter++) {
    		cout << iter->first<<":"<< iter->second << endl;
    	}*/
    	cimg_forXY(pic, x, y) {
    		pic(x, y) = index[pic(x, y)];
    		//cout << pic(x, y) << " ";
    	}
    	pic.display("处理后图片");
    	CImg<int> hist1 = pic.histogram(256, 0, 255);
    	hist1.display_graph("处理后直方图");
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 本文主要介绍对《数字图像处理》第三章书中示例图片实现 反转变换、对数变换以及伽马变换的代码 若要获取更多数字图像处理,python,深度学习,机器学习,计算机视觉等高清PDF以及 更多有意思的 分享,可搜一搜 微信...

    本文主要介绍对《数字图像处理》第三章书中示例图片实现 反转变换对数变换以及伽马变换的代码

    若要获取更多数字图像处理,python,深度学习,机器学习,计算机视觉等高清PDF以及 更多有意思的 分享,可搜一搜 微信公共号 “分享猿” 免费获取资源。也可扫描下面的二维码关注,期待你的到来~
    在这里插入图片描述
    图像增强的三类基本函数:线性函数(反转和恒等变换)、对数函数(对数和反对数变换)、幂律函数(n次幂和n次跟变换)

    一、反转变换

    公式S=L-1-r
    在这里插入图片描述
    代码实现

    import cv2
    import numpy as np
    
    img = cv2.imread(r'C:\Users\xxx\Desktop\breast.tif',0)
    
    reverse_img = 255 - img
    
    cv2.imshow('srcimg',img)
    cv2.imshow('reverse_img',reverse_img)
    cv2.waitKey(0)
    

    下列分别是乳房X射线原始图及用上式给出的反转图像
    在这里插入图片描述 在这里插入图片描述
    二、对数变换

    公式s=clog(1+r)
    下图是当c=1时的r与s关系图
    在这里插入图片描述
    代码实现

    import cv2
    import math
    import numpy as np
    
    def logTransform(c,img):
    
        #3通道RGB
        '''h,w,d = img.shape[0],img.shape[1],img.shape[2]
        new_img = np.zeros((h,w,d))
        for i in range(h):
            for j in range(w):
                for k in range(d):
                    new_img[i,j,k] = c*(math.log(1.0+img[i,j,k]))'''
    
        #灰度图专属
        h,w = img.shape[0], img.shape[1]
        new_img = np.zeros((h, w))
        for i in range(h):
            for j in range(w):
                new_img[i, j] = c * (math.log(1.0 + img[i, j]))
    
    
        new_img = cv2.normalize(new_img,new_img,0,255,cv2.NORM_MINMAX)
    
        return new_img
        
    #替换为你的图片路径
    img = cv2.imread(r'C:\Users\xxx\Desktop\Fourier spectrum.tif',0)
    
    log_img = logTransform(1.0,img)
    cv2.imshow('log_img',log_img)
    cv2.imwrite(r'C:\Users\xxx\Desktop\Fourier spectrum2.jpg',log_img)
    cv2.waitKey(0)
    

    备注:当r=255时,s=5.541

    下列图像分别是傅里叶频谱和应用上式中的对数变换(c=1)的结果
    在这里插入图片描述 在这里插入图片描述
    由于对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率较小,所以图像经过对数变换后,较暗区域的对比度将有所提升。可用于增强图像的暗部细节

    三、幂律(伽马)变化

    公式:s=cr^γ
    其中c、γ 为常数。考虑偏移量上式可写为 s=c(ε+r)^γ
    对于不同的 γ 值,s 与 r的关系曲线如下图所示
    在这里插入图片描述
    伽马变换可以很好地拉伸图像的对比度,扩展灰度级。
    由图可知,
    当图像的整体灰度偏暗时,选择γ<1,可以使图像增亮;
    当图像的整体灰度偏亮时,选择γ>1,可以使图像变暗,
    提高图像的对比度,凸显细节。

    用于图像获取、打印和显示的各种设备根据幂律来产生响应,用于校正这些幂律响应现象的处理称为伽马校正
    例如,阴极射线管(CRT)设备有一个灰度-电压响应,该响应是一个指数变化范围约为1.8~2.5的幂函数。

    代码实现

    import math
    import numpy as np
    import cv2
    
    def gammaTranform(c,gamma,image):
        h,w,d = image.shape[0],image.shape[1],image.shape[2]
        new_img = np.zeros((h,w,d),dtype=np.float32)
        for i in range(h):
            for j in range(w):
                new_img[i,j,0] = c*math.pow(image[i, j, 0], gamma)
                new_img[i,j,1] = c*math.pow(image[i, j, 1], gamma)
                new_img[i,j,2] = c*math.pow(image[i, j, 2], gamma)
        cv2.normalize(new_img,new_img,0,255,cv2.NORM_MINMAX)
        new_img = cv2.convertScaleAbs(new_img)
    
        return new_img
    
    img = cv2.imread(r'C:\Users\xxx\Desktop\gray.jpg',1)
    
    new_img = gammaTranform(1,2.5,img)
    
    cv2.imshow('x',new_img)
    cv2.imwrite(r'C:\Users\xxx\Desktop\gray_2.5.jpg',new_img)
    cv2.waitKey(0)
    

    下图是用变换s = r^1/2.5 = r^0.4进行伽马校正的示例的结果
    在这里插入图片描述
    一般,随着设备的不同,伽马值也不同

    使用幂律变换进行对比度增强
    γ<1 增强亮度
    分别是原图,以及c=1时的γ=0.6、0.4、0.3时应用上公示的结果
    在这里插入图片描述

    γ>1 增强暗度
    航拍图像
    在这里插入图片描述
    下面三幅图片分别是c=1时γ等于3.0、4.0、5.0时应用公式变换的结果
    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    搜索公众号“分享猿”,并回复关键词“代码”,获取本文全部代码
    留言或者公众号关注我,我们一起分享数字图像处理心得,一起交流学习吧~

    展开全文
  • 题目:选择合适的基本灰度变换模型及其参数,通过该变换增强测试图像EXP2C.tif的全局对比度。...选择幂律(伽马)变换模型来增强图像的对比度,幂律变换的模型为   在实验中将用X来表示伽马值γ。 步骤: 1...
  • 数字图像处理(Digital Image Processing)是通过计算机对图像进行...在数字图像处理学习笔记(八)中,已对图像增强之线性变换、对数变换、幂律变换、分段线性变换、灰度级分层等做过详细理论论述,本文将对上述理...
  • 幂律变换的基本形式为:,其中和是常数 有时考虑到偏移量,上式也写为。然而,偏移量是一般显示标定问题,因而作为一个结果,通常在上式中忽略不计。 与对数变换情况类似,部分值得幂律曲线将较窄范围的暗色值,...
  • matlab图形变换

    2020-07-19 23:31:54
    基于matlab的灰度图像变换程序
  • 变换的基本表达式为:y=cxr+b 其中c、r均为正数。与对数变换相同,变换将部分灰度区域映射到更宽的区域中。当r=1时,变换转变为线性变换。 (1) 当r (2) 当r>0时,变换函数曲线在正比函数下方。此时...
  • 本系列python版本:python3.5.4 本系列opencv-python版本:opencv-python3.4.2.17 本系列使用的开发环境是jupyter notebook,是一个python的交互式开发环境,测试十分方便,并集成了...上文【数字图像处理系列二...
  • 幂律变换的基本形式为: (1) 其中c和为正常数。有时考虑到偏移量 可将式(1)写为。偏移量一般是显示标定问题,作为一个结果,通常在式(1)中忽略不计。对于不同的值,s与r的关系如图1所示。 图1 变换曲线 与...
  • 文章目录变换核磁共振图像代码实现遇到问题附代码: 变换 变换,点运算的一种,运算公式为s=crγ,其中,c和γ是正常数。 当γ<1,此时扩展低灰度级,压缩高灰度级,在正比函数上方,使图像变亮; 当...
  • 1、算法原理 伽马变换(幂律变换)是常用的灰度变换,是一种简单的图像增强算法。数学公式如下:(1) 式(1)中,r为输入的灰度值,取值范围为[0, 1]。C称为灰度缩放系数,用于整体拉伸图像灰度,通常取值为1。...
  • 图像增强-伽马变换

    2019-08-28 20:43:25
    幂律变换主要用于图像的校正,对漂白的图片或者是过黑的图片进行修正,幂律变换的公式如下: 根据 γ的大小,主要可分为以下两种情况: γ > 1: 处理漂白的图片,进行灰度级压缩 γ < 1: 处理过黑的...
  • 空间域处理包括灰度变换和空间滤波两类,作用是用来对图像进行增强...空间域指的是图像平面本身,这类图像处理技术直接操作图像中的像素。 空间域处理可以用下列表达式来表示:g(x,y) = T[ f(x,y) ],其中f(x,y)是...
  • 率(伽马)变换

    2015-05-07 11:13:03
    多数转自:[http://blog.csdn.net/lichengyu/article/details/8457425]  http://blog.csdn.net/love_xunmeng/article/details/8274400  (http://blog.csdn.net/lichengyu/article/details/8457425) ...
  • FPGA开源工作室FPGA/图像处理/创业/职场关注基于FPGA的灰度图像处理之幂律(伽马)变化1 背景知识幂律变换的基本形式为:----------------------------...
  • 主要参考内容 ...图像增强:线性、 分段线性、 对数、 反对数、 幂律(伽马)变换、直方图均衡. 感谢各位博主分享,侵删 关于OpenCV和numpy模块 需要先导入cv2和numpy库,我的pycharm已经安装了anacond...
  • 图像处理的伽马变换基于公式 其中,γ为常数,s为输出图像矩阵序列,r是输入图像矩阵序列。 由于γ不一样会使得不同灰度进行拉伸或者压缩,如下图 当γ小于1时,低灰度区间拉伸,高灰度区间压缩; 当γ大于1时,低...
  • 前一篇文章讲解了图像灰度化处理及线性变换知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,本篇文章主要讲解非线性变换,使用自定义方法对图像进行灰度化处理,包括对数变换和伽马变换。本文主要讲解灰度...
1 2 3 4 5 ... 20
收藏数 438
精华内容 175
关键字:

图像处理幂律变换