• MATLAB图像处理学习——图像增强技术(附图像增强方法代码)


    目录

    1.概论

    (1)图像增强技术简介

    (2)图像质量评估

    2.空间域内的图像增强

     (1)显示灰度直方图

     (2)图像灰度值调整

     (3)图像亮度调节

     (4)灰度图像的反转变换

     3.直方图增强

     (1)RGB彩色图像的颜色直方图

     (2)直方图均衡化

     (3)直方图规定化


    1.概论

    (1)图像增强技术简介

        图像增强技术一般通过对图像的某些特征,例如边缘信息、轮廓信息和对比度等进行突出或增强,从而更好地显示图像的有用信息,提高图像的使用价值。

        传统的图像增强技术大多是基在空间域中对图像进行处理。(空间域的图像增强技术主要有灰度变换直方图方法等)

        通过傅里叶变换可以将图像从空间域转换到频域,在频域进行滤波,然后在使用傅里叶反变换转换到空间域。

    (2)图像质量评估

        图像质量包含两方面的内容,一是图像的逼真度,即是被评价图像与原标准图像的偏离程度;二是图像的可懂性,指图像能向人或机器提供信息的能力。

        图像质量评价方法分为主观评价和客观评价。

    2.空间域内的图像增强

    (1)显示灰度直方图

     可以使用imhist()方法获取灰度图像的直方图,使用方法如下:

    imhist(I):该函数绘制灰度图像I的直方图

    imhist(I,n): 该函数指定灰度级的数目为n,n的默认值为256

    imhist(X,map): 该函数绘制索引图像X的直方图

    [counts,x]=imhist(...): 该函数返回直方图的数据,使用stem(x,counts)可以绘制直方图

    代码(获取灰度图像的直方图):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. figure;
    4. subplot(121),imshow(uint8(I));
    5. subplot(122),imhist(I);

    运行结果:

     (2)图像灰度值调整

    在matlab中提供imadjust()方法对图像灰度值进行调整,调用方法如下:

    J=imadjust(I):该函数对图像I 进行灰度调整

    J=imadjust(I,[low_in;high_in],[low_out;high_out]):该函数中[low_in;high_in]为原图像中要变换的灰度范围,[low_out;high_out]为变换后的灰度范围

    J=imadjust(I,[low_in;high_in],[low_out;high_out],gamma):该函数中的gamma是映射的方式,默认值为1,即线性映射。当gamma不等于1时为非线性映射。

    RGB2=imadjust(RGB1,... ):该函数对彩色图像的RGB1进行调整

    代码(调整图像灰度值):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. J=imadjust(I,[0.2;0.5],[0;1]);
    4. figure;
    5. subplot(121),imshow(uint8(I));
    6. subplot(122),imshow(uint8(J));

    运行结果:

     代码(调整灰度图像亮度):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. J=imadjust(I,[0.2;0.5],[0;1],0.4);
    4. K=imadjust(I,[0.1;0.5],[0;1], 4);
    5. figure;
    6. subplot(121),imshow(uint8(J));
    7. subplot(122),imshow(uint8(K));

    运行结果:

     代码(对彩色图像进行增强):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/4.jpg');
    3. J=imadjust(I,[0.2 0.3 0;0.6 0.7 1],[]);
    4. figure;
    5. subplot(121),imshow(uint8(I));
    6. subplot(122),imshow(uint8(J));

    运行结果:

     (3)图像亮度调节

    在matlab中还可以通过函数brighten()改变灰度图像的亮度,调用方法如下:

    brighten(beta):该函数改变图像的亮度,如果beta大于0小于1,则图像变亮;如果beta小于0大于-1,则图像变暗。

    brighten(h,beta):该函数对句柄为h的图像进行操作

    代码(调整灰度图像的亮度):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. figure,imshow(I);brighten(0.6);%图像变亮
    4. figure,imshow(I);brighten(-0.6)%图像变暗

    运行结果:

     代码(通过函数stretchlim()和函数imadjust()进行图像增强):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. M=stretchlim(I);
    4. J=imadjust(I,M,[]);
    5. figure,imshow(uint8(I));
    6. figure,imshow(uint8(J));

    (在程序中,通过函数stretchlim()获取最佳的输入区间,然后通过函数imadjust()调整灰度,最后达到灰度图像增强的效果)

    运行结果:

     (4)灰度图像的反转变换

    使用方法imcomplement()进行灰度图像的反转变换。

    代码(灰度图像的反转变换):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. J=imcomplement(I)
    4. figure,imshow(uint8(I));
    5. figure,imshow(uint8(J));

    运行结果:

     3.直方图增强

    (1)RGB彩色图像的颜色直方图

    使用matlab提供的imhist方法。

    代码(计算RGB彩色图像的颜色直方图):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/4.jpg');
    3. figure;
    4. subplot(141);imshow(uint8(I));
    5. subplot(142);imhist(I(:,:,1));
    6. title('R');
    7. subplot(143);imhist(I(:,:,2));
    8. title('G');
    9. subplot(144);imhist(I(:,:,3));
    10. title('B');

    运行结果:

     (2)直方图均衡化

    在matlab图像处理工具箱中提供了函数histeq()进行直方图均衡化处理,其具体调用方法如下:

    J=histeq(I,n):该函数中I为输入的原图像,J为直方图均衡化得到的图像,n为均衡化后的灰度级数,默认值为64

    代码(直方图均衡化处理):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. J=histeq(I);
    4. figure;
    5. subplot(121);imshow(uint8(I));
    6. subplot(122);imshow(uint8(J));
    7. figure;
    8. subplot(121);imhist(I,64);
    9. subplot(122);imhist(J,64);

    运行结果:

     

     (3)直方图规定化

    J=histeq(I,hgram):该函数中hgram是一个整数向量,表示用户希望的直方图形状。

    代码(对图像进行直方图规定化):

    1. close all;clear all;clc;
    2. I=imread('D:/resource_photo/1(1).tif');
    3. hgram=ones(1,256);
    4. J=histeq(I,hgram);
    5. figure;
    6. subplot(121);imshow(uint8(J));
    7. subplot(122);imhist(J);

    运行结果:

     

  • 相关阅读:
    Oracle数据如何迁移导入到MySQL
    JMeter适合做接口测试吗?
    基于 Bitbucket 的 CI/CD 在 Flutter 中的应用
    你好,面试官 | 终于上岸了,你会哪些 JVM 调优参数?呆住了。。。
    钡铼BL124EC实现EtherCAT转Ethernet/IP的优势
    CPU核心、使用率、负荷、是否开启超线程、如何排查java程序cpu使用率过高
    根据实体类生成表生成语句
    go语言rpc初体验
    刷刷刷——滑动窗口
    java技术文档--多线程(1)--核心学习大纲--首页
  • 原文地址:https://blog.csdn.net/weixin_52135595/article/details/126890217