zoukankan      html  css  js  c++  java
  • 灰度变换之灰度线性拉伸(算法1)

    第一部分:分段(线性变换)函数

    摘自百度百科:

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

    它可以有选择的拉伸某段灰度区间以改善输出图像。如图,所示的变换函数的运算结果是将原图在a到b之间的灰度拉伸到c到d之间。如果一幅图像的灰度集中在较暗的区域而导致图像偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同样如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜率<1)物体灰度区间以改善图像质量

    原理:函数表达式

    第二天睡饱了再看这个函数是如何构造的:选取了四个点(0,0) (x1,y1)  (x2,y2)  (255,255)

    先计算斜率  然后再点斜式,(x1,y1)  (x2,y2)自己设定

    然后可以不断调整整个函数的图像。

    分段函数的图像表达式:

    代码:

    function out = MySegmentLinear(I,x1,x2,y1,y2)
    %功能:实现灰度图像的分段线性变换
    %理论基础:http://pan.baidu.com/s/1dFoFuSD
    %输入参数I是uint8类型的灰度图像数据;
    
    I=im2double(I);
    [M,N] = size(I);
    out = zeros(M,N);
    
    for i=1:M
        for j=1:N
            if I(i,j)<x1
                out(i,j) = y1 * I(i,j) / x1;
            elseif I(i,j)>x2
                out(i,j) = (I(i,j)-x2)*(1-y2)/(1-x2) + y2;
            else
                out(i,j) = (I(i,j)-x1)*(y2-y1)/(x2-x1) + y1;
            end
        end
    end
    
    out=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);

     效果:

    原图:

  • 相关阅读:
    【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式
    【MPI学习1】简单MPI程序示例
    【多线程】零碎记录1
    【APUE】Chapter17 Advanced IPC & sign extension & 结构体内存对齐
    php-7.1编译记录
    rsyslogd系统日志服务总结
    php配置(php7.3)
    php-fpm回顾和总结
    php-fpm配置项
    Hive之执行计划分析(explain)
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/8343852.html
Copyright © 2011-2022 走看看