精华内容
下载资源
问答
  • 运用本函数,可以使图像对比度拉伸,效果比直接使用imadjust,此函数是冈萨雷斯 数字图像处理 上面的 运用本函数,可以使图像对比度拉伸,效果比直接使用imadjust,此函数是冈萨雷斯 数字图像处理 上面的
  • 对原图像进行归一化处理,即用【图像矩阵元素-处理前灰度级最小值】除以【处理前灰度级最大值-处理前灰度级最小值】; 将图像灰度级放缩至我们指定的预期期间,即用【处理后的灰度级最小值】加上“ 【步骤3中归一化...

    一、问题与解决思路

    在这里插入图片描述

    图像实质上就是一个包含了许多像素点的矩阵。

    具体计算过程如下:

    1. 通过min()函数以及max()函数分别求出处理前原图像的灰度级最小值与最大值;
    2. 对原图像进行归一化处理,即用【图像矩阵元素-处理前灰度级最小值】除以【处理前灰度级最大值-处理前灰度级最小值】;
    3. 将图像灰度级放缩至我们指定的预期期间,即用【处理后的灰度级最小值】加上“ 【步骤3中归一化处理后的结果】乘以【处理后的灰度级最大值-处理后的灰度级最小值】 ”;
    4. 将处理后的图像转为uint8类型以便于正确显示。

    二、Python 实现代码

    1) 核心函数

    from PIL import Image
    from pylab import *
    
    # 自定义图像对比度拉伸函数 myGrayScaleTransformJ
    def myGrayScaleTransformJ(img1, para):
        # 若输入不合法,返回原图像
        if (para[0] < 0 or para[1] > 255 or para[0] > para[1]):
            img2 = Image.fromarray(uint8(img1))
            return img2
        # min_after,max_after 分别表示拉伸后灰度级区间的最小值与最大值
        min_after = para[0]
        max_after = para[1]
        # min_before,max_before 分别表示处理前灰度级区间的最小值与最大值
        min_before = img1.min()
        max_before = img1.max()
        # 1、将处理前的图像灰度级进行归一化处理
        temp = (img1 - min_before) / (max_before - min_before)
        # 2、将图像的灰度级放缩至我们指定的预期区间
        img2 = min_after + (temp * (max_after - min_after))
        # 3、转成uint8 类型以便正确显示
        img2 = Image.fromarray(uint8(img2))
        return img2
    

    2) 主函数

    from PIL import Image
    from pylab import *
    import matplotlib.pyplot as plt
    import MyModule
    
    # 以下两行代码解决图片标题中文乱码问题
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    img = Image.open("EXP1A.tif").convert("RGB")  # 读入图像  .convert("RGB")解决灰度图像失真问题
    plt.subplot(121)  # 划分为1行2列,先画左边第一个
    plt.axis('off')
    plt.title('原图像')
    plt.imshow(img)  # 画出原图像
    
    imgArr = array(Image.open("EXP1A.tif").convert("RGB"))  # 读入图像并转为数组
    # 读入para数组,即预期拉伸的灰度级区间范围,para1为最小值,para2为最大值
    print ("请分别输入预期拉伸的灰度级区间范围的最小值与最大值(空格隔开):")
    arr = input("")
    para = [int(n) for n in arr.split()]
    
    enhancedImg = MyModule.myGrayScaleTransformJ(imgArr, para)  # 调用自定义函数进行线性拉伸
    plt.subplot(122)
    plt.axis('off')
    plt.title('处理后')
    plt.imshow(enhancedImg)  # 画出处理后的图像
    plt.show()
    

    注意点:

    使用 Python 进行图像处理需导入第三方依赖,而 Matlab 则可以直接调用官方的工具包

    from PIL import Image
    

    上方语句中的 PIL 用于完成图像的基本处理,如读取图像到程序中,默认为 uint8 类型

    from pylab import *
    

    需导入上方依赖才能将图像转换为数组

    三、Matlab 实现代码

    1) 核心函数

    % img1:处理前的灰度图像;img2:处理后的灰度图像
    % para(1)表示拉伸后灰度级区间的最小值
    % para(2)表示拉伸后灰度级区间的最大值
    
    function img2 = myGrayScaleTransformJ(img1,para)
        % 若输入不合法,则返回原图像
        if (para(1)<0 || para(2)>255 || para(1)>para(2))
            img2 = img1;
            return;
        end
        img1 = double(img1);
        % min_after,max_after分别表示拉伸后灰度级区间的最小值与最大值
        min_after = para(1);
        max_after = para(2);
        % min_before,max_before分别表示处理前灰度级区间的最小值与最大值
        min_before = min(img1(:));
        max_before = max(img1(:));
        % 1、将处理前的图像灰度级进行归一化处理
        temp = (img1 - min_before) ./ (max_before - min_before);
        % 2、将图像的灰度级放缩至我们指定的预期区间
        img2 = min_after + temp .* (max_after - min_after); 
        % 转成uint8类型以便正确显示
        img2 = uint8(img2);
    end
    

    2) 主函数:

    clc;
    clear all;
    img1 = imread('EXP1A.tif');
    % 画出原来的图像
    subplot(2,2,1); 
    imshow(img1);   
    title('A:raw img');
    
    % 输入数据并调用函数
    min = input('请输入拉伸后的灰度级最小值:');
    max = input('请输入拉伸后的灰度级最大值:');
    para = [min, max];
    img2 = myGrayScaleTransformJ(img1, para); 
    
    % 画出将对比度线性拉伸后的图像
    subplot(2,2,2);
    imshow(img2);
    title('A:enhanced img');        
    

    3) 运行效果:

    在这里插入图片描述

    展开全文
  • 图像对比度拉伸实现一个明智的线性函数。
  • 图像处理 对比度拉伸

    2018-11-22 13:52:11
    数字图像处理 对比度拉伸
  • 在数字图像中,空域中的对比度拉伸增强变换。用matlab编写的程序。
  • matlab开发-彩色图像对比度增强。这个程序演示了色彩空间中对比度增强的概念。
  • VS2008环境中利用OpenCV对图像对比度拉伸
  • 对比度拉伸变换对图像进行对比度拉伸变换,压缩动态范围,将我们所关注的边界特征信息详细化,从而使得输出图像亮区域更亮,暗区域更暗,提高了图像的对比度。 opencv中的 LUT函数(look up table)为查表函数, ...

    对比度拉伸变换  对图像进行对比度拉伸变换,压缩动态范围,将我们所关注的边界特征信息详细化,从而使得输出图像亮区域更亮,暗区域更暗,提高了图像的对比度。

    opencv中的  LUT函数(look up table)为查表函数,

    void LUT(InputArray src, InputArray lut, OutputArray dst);

    InputArray src:输入图像

    OutputArray dst:输出图像

    InputArray lut:查找表

    #include<opencv2/opencv.hpp>
    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    using namespace cv;
    
    void contrastStretch(Mat &img)
    {
    	if (img.empty())
    	{
    		cerr << "image empty" << endl;
    		return;
    	}
    	// 计算图像的最大最小值
    	double pixMin, pixMax;
    	minMaxLoc(img, &pixMin, &pixMax);
    
    	//create lut table
    	Mat lookut(1, 256, CV_8U);
    	for (int i = 0; i < 256; i++)
    	{
    		if (i < pixMin)
    			lookut.at<uchar>(i) = 0;
    		else if (i > pixMax)
    			lookut.at<uchar>(i) = 255;
    		else 
    			lookut.at<uchar>(i) = static_cast<uchar>(255.0*(i - pixMin) / (pixMax - pixMin) + 0.5);
    	}
    	LUT(img, lookut, img); //(look up table)即为查表函数
    }
    
    int main()
    {
    	Mat srcImage = imread(img_name,1);
    	if (!srcImage.data)
    		return 0;
    	Mat resultImage;
    
    	vector<Mat> channel;
    	split(srcImage, channel);
    	contrastStretch(channel[0]);
    	contrastStretch(channel[1]);
    	contrastStretch(channel[2]);
    	merge(channel, resultImage);//合并3个通道
    
    	imshow("srcImage", srcImage);
    	imshow("resultImage", resultImage);
    	waitKey(0);
    
    	return 0;
    }

    结果如下,图像变得更加对比清晰

     

    展开全文
  • 数字图像处理实验之对比度拉伸

    千次阅读 2019-07-17 15:38:42
    可以通过对比度拉伸提高图像对比度,显示更多细节。先来看看对比度拉伸的典型变换: 书本中(冈萨雷斯:数字图像处理第三版P69)的对比度拉伸变换函数图是这样的: 图3.10(b)低对比度拉伸图中,最低灰度级为91,...

    一幅图像中,最高灰度级和最低灰度级的差成为对比度。一幅低对比度的图像,看起来细节会少很多。可以通过对比度拉伸提高图像对比度,显示更多细节。先来看看对比度拉伸的典型变换:
    对比度拉伸典型变换
    书本中(冈萨雷斯:数字图像处理第三版P69)的对比度拉伸变换函数图是这样的:

    书中对比度拉伸变换函数图
    图3.10(b)低对比度拉伸图中,最低灰度级为91,最高灰度级为138,并且要将灰度值拉伸至[0, 255]。阈值处理的函数的图像即为P64图3.2第二个图像,其中k = 109。
    实验代码如下:

    % 读入图像
    img_1 = imread('Fig0310(b)(washed_out_pollen_image).tif');
    
    % max():返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
    % 再一次即可求得最高灰度级
    r_max = max(max(img_1));
    %max() 同理
    r_min = min(min(img_1));
    
    % 求输入图像的尺寸
    [r, c] = size(img_1);
    
    % 生成两张0图,一张用于对比度拉伸,一张用于阈值处理
    img_2 = zeros(r, c);
    img_3 = zeros(r, c);
    
    % 将输入图像转换成double型
    img_1s = double(img_1);
    
    % 计算斜率
    k = (255 - 0) / (r_max - r_min);
    % 灰度级总和
    sum = 0;
    
    for x = 1 : r
        for y = 1 : c
            % 对每个像素点进行拉伸,并赋值到新图像
            img_2(x, y) = k * (img_1s(x, y) - r_min);
            % 求灰度级总和
            sum = sum + img_1s(x, y);
        end
    end
    
    % 求阈值,这里阈值为平均值
    avg = sum / (r * c);
    
    % 阈值处理
    for x = 1 : r
        for y = 1 : c
            % 小于阈值赋值0
            if img_1s(x, y) < avg
                 img_3(x, y) = 0;
             % 大于阈值赋值1
            else
                img_3(x, y) = 1;
            end
        end
    end
    
    % 转换
    img_2 =  im2uint8(mat2gray(img_2));
    img_3 =  im2uint8(mat2gray(img_3));
    % 显示
    subplot(131), imshow(img_1);
    subplot(132), imshow(img_2);
    subplot(133), imshow(img_3);
    

    结果如下:
    结果对比

    展开全文
  • 对比度拉伸是一种简单的图像增强技术,它试图通过“拉伸”图像所包含的强度值范围以跨越所需的值范围来提高图像的对比度,例如相关图像类型允许的整个像素值范围。 它与更复杂的直方图均衡化不同,它只能对图像像素...
  • 冈萨雷斯图像处理笔记——对比度拉伸(线性变换函数) (事先声明:文章本意只是作为自己的笔记,初学者代码粗糙不规范,欢迎大家指出错误。) 本篇文章内容针对冈萨雷斯图像处理第三版P69中内容 如下图: 低对比度...

    冈萨雷斯图像处理笔记——对比度拉伸(线性变换函数)

    (事先声明:文章本意只是作为自己的笔记,初学者代码粗糙不规范,欢迎大家指出错误。)

    本篇文章内容针对冈萨雷斯图像处理第三版P69中内容

    如下图:
    本文的效果是达到从图(b)到图(d)
     

      低对比度的图像由照明不足、成像传感器动态范围太小、图像获取过程中镜头光圈设置错误引起。对比度拉伸是扩展图像灰度级动态范围的处理,因此可以跨越记录介质和显示装置的全部灰度范围。
     

      图3.10(a)显示了一个用于对比度拉伸的典型变换。点(r1,s1)和点(r2,s2)的位置控制变换函数的形状。若r1=s1且r2=s2,则变换为一线性函数,产生没有变化的灰度级。若r1=r2,s1=0且s2=L-1,则变换变为阈值处理函数,产生一幅二值图像。
     

      一般情况下,假设r1<=r2且s1<=s2,函数是单值的且单调递增的。这一条件保持了灰度级的次序,从而避免了在处理后的图像中产生认为的灰度错误。

     

      图3.10(b)显示了一幅8比特低对比度图像。图3.10©显示了对比拉伸后的效果,得到该效果的参数设置如下:(r1,s1)=(rmin,0)且(r2,s2)=(rmax,L-1),其中rmin和rmax分别为图像中的最小灰度级和最大灰度级。因此,变换函数把灰度级由原范围线性地拉伸到整个范围[0,L-1]。
     

      图3.10(d)显示了前面定义的(r1,s1)=(m,0)和(r2,s2)=(m,L-1)的阈值处理函数后的结果,其中,m是图像的平均灰度级。
     

    废话不多说了,直接上代码了(这里只做了从图b到图c的转换,同理能进行图b到图d的转换)

    Mat Contrast_ratio(Mat Image)//拉伸图像对比度
    {
    	Mat dstImage = Mat::zeros(Image.size(), Image.type());
    
    	int min = 255; int max = 0;
    	for (int i = 0; i < Image.rows; i++)
    	{
    		for (int j = 0; j < Image.cols; j++)
    		{
    
    			if (Image.at<uchar>(i, j) < min)
    			{
    				min = Image.at<uchar>(i, j);
    			}
    			if (Image.at<uchar>(i, j) > max)
    			{
    				max = Image.at<uchar>(i, j);
    			}
    		}
    	}
    
    	//Y=aX+b  X为输入灰度值,Y为输出灰度值,a,b为对比度拉伸函数的系数。
    	double a = 255 / (max - min);
    	double b = -(a * min);
    	double result;
    
    	for (int i = 0; i < Image.rows; i++)
    	{
    		for (int j = 0; j < Image.cols; j++)
    		{
    			result = Image.at<uchar>(i, j) * a + b;
    			if (result > 255)
    			{
    				result = 255;
    			}
    			dstImage.at<uchar>(i, j) = result;
    		}
    	}
    
    	return dstImage;
    }
    

     
    主函数部分:

    int main(void)
    {
    	Mat Image = imread("D://数字图像处理/第3章图像/picture1.jpg", 0);//读入图片
    	imshow("Image", Image);//显示原图
    	
    	Mat dstImage = Contrast_ratio(Image);//输出的图片
    	imshow("dstImage", dstImage);//显示处理后的图片
    
    	waitKey();
    
    	return 0;
    }
    

     

    处理后的结果:
    对比度变换前后
    可以看出得到的图像基本符合预期效果,图像清晰度肉眼可见提升。
     

      总结:对比度拉伸的原理简单来说就是把比较窄的灰度级范围,扩展到整个灰度范围上,让明暗更加分明。对于本篇中来说,就是把rmin变为0,rmax变为255,其余的也进行相应线性变化。

    展开全文
  • 以lena图像为例,C++实现了对图像对比度拉伸
  • 对比度拉伸图像增强的一种方法,也属于灰度变换操作。我们看如下图像: 可以看到,这张图片非常灰暗。我们查看下其直方图。 import cv2 import matplotlib.pyplot as plt farina = cv2.imread("far...
  • 图像增强之对比度拉伸

    万次阅读 多人点赞 2018-03-24 13:39:59
    对比度拉伸图像增强的一种方法,也属于灰度变换操作。我们看如下图像: 可以看到,这张图片非常灰暗。我们查看下其直方图。 import cv2 import matplotlib.pyplot as plt farina = cv2.imread(...
  • 点运算又称为对比度增强、对比度拉伸或灰度变换,是一种通过图像中的每一个像素值进行运算的图像处理方式。。它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅有对应的输入像素点的灰度值决定,运算结果...
  • 题目:定义一个图像对比度拉伸函数,函数名为myGrayScaleTransform,将输入图像的对比度线性平滑地拉伸到指定的灰度级区间,要求该函数的输入参数包括处理前的灰度图像img1 (如EXP1A.tif)、期望灰度级的参数区间...
  • Matlab——对比度拉伸

    万次阅读 2018-07-31 22:20:25
    1、代码如下: close all;clear all;clc; %关闭所有图形窗口,清除工作空间所有变量,清空命令行 I=imread('pout.tif'); J=imadjust(I,[0.2 0.5],[0 1]);%将0.2-0.5之间的灰度扩展到整个0-1范围,这种处理 对于...
  • 冈萨雷斯数字图像处理(第三版)matlab代码 图3.10 对比度拉伸
  • OpenCV图像增强之对比度拉伸 C++

    千次阅读 2019-02-19 17:51:22
    下图是典型的对比度拉伸变换。点(r1,s1)和(r2,s2)的位置控制变换函数的形状。 如果r1=r2,s1=s2,则变换为一线性函数; 若r1=r2,s1=0且s2=L-1,则是阈值处理函数,产生一幅二值图像; 处理一幅8bit低对比度图像,(r1,...
  • 图像处理中对比度拉伸的matlab程序,对初学者了解对比度拉伸很有帮助哦,
  • 对比度拉伸和对数变换 img1 = im2uint8(mat2gray(log(1+double(img)))); img2 = 1./(1+(0.5./mat2gray(img)).^0.5); img3 = 1./(1+(0.5./mat2gray(img)).^5); img4 = 1./(1+(0.5./mat2gray(img)).^50);
  • 一、将一幅图像转化为二值图像,可以使用如下函数: BW = im2bw(I, level) %输出像素点小于level的像素,I是代表图像的变量,level是阈值,level属于[0 1]. BW = im2bw(RGB, level)%将RGB彩色图像转换为二值图像,...
  • 运行代码并为不同的操作输入不同的值,如带/不带背景的灰度切片、基本阈值操作、图像负片、对比度拉伸
  • 将rgb图像转化为ycbcr,在直方图均衡化,实现彩色图片对比度的增强,图片效果较好,代码简单。图像不会失真。
  • 在8位灰度图像(C#)上实现分段线性对比度拉伸的程序。
  • 这段代码可以实现256彩色图像对比度拉伸

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,443
精华内容 2,577
关键字:

图像对比度拉伸