精华内容
下载资源
问答
  • 数字图像处理对数变换

    千次阅读 2019-05-07 17:04:48
    设置窗口大小的函数: namedWindow("窗口名", 0); resizeWindow("窗口名", ... resizeWindow("对数变换", 500, 600); imshow("原图", image); imshow("对数变换", result); waitKey(0); return 0; }

    设置窗口大小的函数:

    namedWindow("窗口名", 0);

    resizeWindow("窗口名", width, height);

    #include <iostream>
    #include <cmath>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    using namespace std;
    using namespace cv;
    void log_transfor(Mat &image, Mat &result)
    {
    	result = image.clone();
    	int rows = image.rows, cols = image.cols;
    	for (int i = 0; i < rows; i++)
    	{
    		for (int j = 0; j < cols; j++)
    		{
    			for (int k = 0; k < 3; k++)
    			{
    				result.at<Vec3b>(i, j)[k] = 31 * log2(1 + image.at<Vec3b>(i, j)[k]);
    			}
    		}
    	}
    }
    int main()
    {
    	Mat image = imread("f:\\图片\\lucky.jpg");
    	
    	Mat result;
    	log_transfor(image, result);
    	namedWindow("原图", 0);
    	namedWindow("对数变换", 0);
    	resizeWindow("原图", 500, 600);
    	resizeWindow("对数变换", 500, 600);
    	imshow("原图", image);
    	imshow("对数变换", result);
    	waitKey(0);
    	return 0;
    }

    展开全文
  • 数字图像处理实验之对数变换

    千次阅读 2019-07-16 16:01:55
    对数变换将输入中范围较窄的低灰度值映射为输出中范围较宽的灰度值,或将输入...使用对数变换来扩展图像中的暗像素值,同时压缩更高灰度级的值。反对数函数的作用于此相反。 对数变换的通用形式为: 对书中傅里叶频...

    对数变换将输入中范围较窄的低灰度值映射为输出中范围较宽的灰度值,或将输入中范围较宽的高灰度值映射为输出中范围较窄的灰度值。结合书本图片说明:
    函数图片
    对于对数函数,可以看到输入中范围在[0~L/4]的灰度值映射为输出中范围为[0~3L/4]的灰度值,同理反对数函数也是这样理解。使用对数变换来扩展图像中的暗像素值,同时压缩更高灰度级的值。反对数函数的作用于此相反。
    对数变换的通用形式为:
    对数变换公式
    对书中傅里叶频谱的图片进行对数变换,代码如下:

    % 读取图像
    img_1 = imread('Fig0305(a)(DFT_no_log).tif');
    % 输入图像是uint8类型的,所以第一步先将输入图像转换成double型的:double(img_1)
    % 对转换成double型的img_1,参照对数变换的公式,其中c = 1,调用log函数:log(1 + double(img_1))
    % 将结果标定为[0, 1]范围内的double类的数组:mat2gray(log(1 + double(img_1)))
    % 最后再将数组转换成uint8类型的图像:im2uint8(mat2gray(log(1 + double(img_1))))
    img_2 = im2uint8(mat2gray(log(1 + double(img_1)))); 
    % 显示图像
    subplot(121), imshow(img_1);
    subplot(122), imshow(img_2);
    

    实验结果如下:
    实验结果

    展开全文
  • 本文参考了 以下这篇文章[数字图像处理]灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割 https://blog.csdn.net/zhoufan900428/article/details/12709361并进行了一下改进。以上为上述文章 的...
    本文参考了 以下这篇文章

    [数字图像处理]灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割 

    https://blog.csdn.net/zhoufan900428/article/details/12709361

    并进行了一下改进。



    以上为上述文章 的原话,这里展示出对数变换的code 和 figure,

    Matlab Code:

    f = 0:0.01:1;
    v1 = 1;
    y1 = log2(1 + v1*f)/log2(v1+1); 
    v2 = 10;
    y2 = log2(1 + v2*f)/log2(v2+1); 
    v3 = 50;
    y3 = log2(1 + v3*f)/log2(v3+1); 
    v4 = 100;
    y4 = log2(1 + v4*f)/log2(v4+1); 
    v5 = 200;
    y5 = log2(1 + v5*f)/log2(v5+1); 
    plot(f,y1,'g',f,y2,'r',f,y3,'b',f,y4,'c',f,y5,'y');
    xlabel('Input gray level');
    ylabel('Output gray level');
    title('Log transformation: g = log(1+v*r)/log(1+v)');
    
    lgd = legend('Log(v=1)','Log(v=10)','Log(v=50)','Log(v=100)','Log(v=200)');
    legend('Location','southeast');
    title(lgd,'The Legend Title')

    Figure:


    从图中我们可以很直观的看出,由于对数本身上凸的性质,它可以把低灰度(较暗)部分的亮度提高,v 越大,灰度提高越明显,即图像越来越亮。

    以下是改进后的对数变换代码,将4个对比图形放在同一张图内,看起来更直观。

    f = imread('2.jpg');  
    I=rgb2gray(f);
    f = mat2gray(I);% 原代码中的[0 255] 可以去掉,因为f中最大最小值等于0, 255
    
    v = 10;  
    g_1 = log2(1 + v*f)/log2(v+1);  
      
    v = 30;  
    g_2 = log2(1 + v*f)/log2(v+1);  
      
    v = 200;  
    g_3 = log2(1 + v*f)/log2(v+1);  
      
    figure(); %这里改成了四个子图,会更加直观  
    subplot(2,2,1);  
    imshow(f,[0 1]);  
    xlabel('a).Original Image');  
    subplot(2,2,2);  
    imshow(g_1,[0 1]);  
    xlabel('b).Log Transformations v=10');  
      
    subplot(2,2,3);  
    imshow(g_2,[0 1]);  
    xlabel('c).Log Transformations v=100');  
      
    subplot(2,2,4);  
    imshow(g_3,[0 1]);  
    xlabel('d).Log Transformations v=200');  

    figure:


    再次感谢 这篇文章在学习这部分内容时提供的帮助。https://blog.csdn.net/zhoufan900428/article/details/12709361



    展开全文
  • 3.1 对数变换 3.2 伽马变换 参考资料 1 灰度变换简介 灰度变换是图像增强的一种重要手段,用于改善图像显示效果,属于空间域处理方法,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显...

    目录

    1 灰度变换简介

    2 线性灰度变换­—图像反转

    3 非线性灰度变换

    3.1 对数变换

    3.2 伽马变换

    参考资料


    1 灰度变换简介

    灰度变换是图像增强的一种重要手段,用于改善图像显示效果,属于空间域处理方法,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。灰度变换其实质就是按一定的规则修改图像每一个像素的灰度,从而改变图像的灰度范围。常见的灰度变换图像反转,对数变换和伽马变换等。其具体分类如下图所示:

     


     

    2 线性灰度变换­—图像反转

    灰度线性变换最常见的就是图像反转,在灰度图像灰度级范围[0,L-1]中,其反转的公式如下所示:

                                                                                            s=L-1-r

    其中,r表示原始图像的灰度级,s表示变换后的灰度级。

     

    下图所示为图像反转的例子,原图像是数字乳房X射线照片,其中显示有一小块病变,通过图像反转就很容易看到病变区域。

     

    代码如下所示:

    # -*- coding: utf-8 -*-
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    #读取原始图像
    img = cv2.imread('zxp.jpg')
    
    #图像灰度转换
    grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    #获取图像高度和宽度
    height = grayImage.shape[0]
    width = grayImage.shape[1]
    
    #创建一幅图像
    result = np.zeros((height, width), np.uint8)
    
    #图像灰度反色变换 s=255-r
    for i in range(height):
        for j in range(width):
            gray = 255 - grayImage[i,j]
            result[i,j] = np.uint8(gray)
    
    #显示图像
    
    cv2.imshow("Gray Image", grayImage)
    cv2.imshow("Result", result)
    
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     


     

    3 非线性灰度变换

    3.1 对数变换

    图像灰度对数变换一般表示如下所示:

                                                                                        s=c\log (1+r)

    其中,r表示原始图像的灰度级,s表示变换后的灰度级,c为常数。

    假设r\ge 0,下图所示的对数曲线的形状表明,改变换将输入中范围较窄的低灰度值映射为输出中较宽范围的灰度值。相反的,对高的输入灰度值也是如此。我们使用这种类型的变换来扩展图像中暗像素的值,同时压缩更高灰度级的值。反对数变换的作用与此相反。

     

    代码如下所示:

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    
    #绘制曲线
    def log_plot(c):
        x = np.arange(0, 256, 0.01)
        y = c * np.log(1 + x)
        plt.plot(x, y, 'r', linewidth=1)
        plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
        plt.title(u'对数变换函数')
        plt.xlim(0, 255), plt.ylim(0, 255)
        plt.show()
    
    #对数变换
    def log(c, img):
        output = c * np.log(1.0 + img)
        output = np.uint8(output + 0.5)
        return output
    
    #读取原始图像
    img = cv2.imread('test8.bmp')
    
    #绘制对数变换曲线
    log_plot(42)
    
    #图像灰度对数变换
    output = log(42, img)
    
    #显示图像
    cv2.imshow('Input', img)
    cv2.imshow('Output', output)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

     

    运行结果如下图所示:

     

     


     

    3.2 伽马变换

    伽玛变换又称为 指数变换 或 幂次变换,是另一种常用的灰度非线性变换。图像灰度的伽玛变换一般表示如下所示:

                                                                                                 s=c{{r}^{\gamma }}

    其中,r表示原始图像的灰度级,s表示变换后的灰度级,c\gamma正常数

    1)当\gamma>1时,会拉伸图像中灰度级较高的区域,压缩灰度级较低的部分;

    2)当\gamma<1时,会拉伸图像中灰度级较低的区域,压缩灰度级较高的部分;

    3)当\gamma=1时,该灰度变换是线性的,此时通过线性方式改变原图像。

    如下图所示,不同\gamma值的变换曲线:

     

    下图所示为图像伽马变换的例子:

     

     

    代码如下所示:

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    
    #绘制曲线
    def gamma_plot(c, v):
        x = np.arange(0, 256, 0.01)
        y = c*x**v
        plt.plot(x, y, 'r', linewidth=1)
        plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
        plt.title(u'伽马变换函数')
        plt.xlim([0, 255]), plt.ylim([0, 255])
        plt.show()
    
    #伽玛变换
    def gamma(img, c, v):
        lut = np.zeros(256, dtype=np.float32)
        for i in range(256):
            lut[i] = c * i ** v
        output_img = cv2.LUT(img, lut) #像素灰度值的映射
        output_img = np.uint8(output_img+0.5)
        return output_img
    
    #读取原始图像
    img = cv2.imread('test9.bmp')
    
    #绘制伽玛变换曲线
    gamma_plot(0.00000005, 4.0)
    
    #图像灰度伽玛变换
    output = gamma(img, 0.00000005, 4.0)
    
    #显示图像
    cv2.imshow('Imput', img)
    cv2.imshow('Output', output)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    运行结果如下图所示:

     


     

    参考资料

    [1] https://blog.csdn.net/Eastmount/article/details/88858696

    [2] https://blog.csdn.net/Eastmount/article/details/88929290

    [3] 冈萨雷斯. 数字图像处理(第三版) 

    展开全文
  • 对数变换: 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...
  • 数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)
  • 数字图像处理笔记(一)资料来源一、人眼视觉特性 资料来源 一、人眼视觉特性 韦伯率:50%概率感觉到亮度变化时的 ΔII\frac{\Delta I}{I}IΔI​为韦伯率。 韦伯-费希纳定律:心理量和物理量之间关系的定律,即感觉...
  • 目录一些基本的灰度变换函数图像反转对数变换 一些基本的灰度变换函数 如下图显示了在图像处理中频繁使用的3类基本函数: 线性(反转和恒等变换)函数 对数(对数和反对数变换)函数 幂律(nnn次幂和nnn次根变换)...
  • 冈萨雷斯数字图像处理(第三版) matlab代码 图3.5 傅里叶频谱及对数变换
  • 数字图像处理之点运算---对数变换

    千次阅读 2019-04-12 20:17:30
    对数变换的一般形式:t=clog(1+s),其中c为尺度比例常数,s为源灰度值,t为变换后的目标灰度值。由函数曲线可知,灰度值低的时候斜率较高,灰度值高的时候斜率低哦,根据这个特点对数变换主要应用于下面的两个方向: ...
  • 本文主要介绍对《数字图像处理》第三章书中示例图片实现 反转变换、对数变换以及伽马变换的代码 若要获取更多数字图像处理,python,深度学习,机器学习,计算机视觉等高清PDF以及 更多有意思的 分享,可搜一搜 微信...
  • 1.图像的线性变换 图像的线性变换 S=k×r+b S=k\times r+b S=k×r+b 其中 rrr 为输入变量,SSS为输出变量,k,bk,bk,b为线性变换中的倍数因子和偏移因子。 当0<k<10<k<10<k<1时,对灰度压缩,...
  • 空间域增强的第一部分:图像反转,对数变换,幂次变换、分段线性变换
  • // 对比度增强.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace cv;...using namespace std;...//rows cols type 目标图像的行,列,以
  • 数字图像处理学习笔记(八)中,已对图像增强之线性变换、对数变换、幂律变换、分段线性变换、灰度级分层等做过详细理论论述,本文将对上述理论知识做实践方面的实现。 具体理论知识可参考我之前的博文:数字图像...
  • 书中所有的实验与数学式都采用了8-bit 图像的灰度范围,也就是0到255这样一个范围,这是本书不合理的一个地方。首先,这样做并不泛用,图片不一定是8-bit的。其次,在做某些变换的时候,可能会导致溢出。比如,伽马....
  • 灰度变换
  • 参考自:《数字图像处理》--第三版--冈萨勒斯--中,以及师兄提供的参考资料,在此对师兄表示感谢。 空间域处理是直接对像素进行操作的方法,这是相对于频率域处理而言的。空间域处理主要分为两大类:灰度变换和...
  • 图像数字化为二维矩阵后,每个点的值都代表一个像素点的灰度值。 灰度级 灰度值的表示范围,灰度级时,称图片为k比特图片。当然灰度级越高,图片的细节则越清晰,因为有更多的灰度值来描述图片。但是灰度级越大...
  • 数字图像处理-空间与处理-灰度变换-基本灰度变换函数(求反、线性灰度变换、换、对数变换、伽马变换、阈值化/二值化) [Python图像处理] 十五.图像的灰度线性变换 图像增强:线性、 分段线性、 对数、 反对数、 幂律...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 205
精华内容 82
关键字:

数字图像处理对数变换