本文章包含以下内容:

1.图像灰度修正。测试图像pout.tif、tire.tif。读入灰度级分布不协调的图像,分析其直方图。根据直方图设计灰度变换表达式,调整表达式的参数,直到显示图像的直方图均衡为止。

2.不均匀光照的校正。测试图像pout.tif,采用分块处理函数blkproc和图像相减函数imsubtract对图像不均匀光照进行校正;

3、三段线性变换增强。测试图像couple.tif。选择合适的转折点,编程对图像进行三段线性变换增强。

4、图像平滑方法。测试图像为eight.tif。对测试图像人为加噪后进行平滑处理。根据噪声的不同,选择不同的去噪方法。

5、图像锐化方法。测试图像为rice.tif、cameraman.tif。读入一副边缘模糊的图像,利用罗伯茨梯度对图像进行4种锐化处理,比较各自的效果。

(灰度修正、不均匀光照的校正、三段线性变换增强、图像平滑方法、图像锐化方法)


目录:

目录

本文章包含以下内容:

目录:

全部代码如下:

结果如下:

下面这些是代码里的各个部分,方便复制

灰度修正:

不均匀光照的校正:

三段线性变换增强:

图像平滑方法:

图像锐化方法:


全部代码如下:

可以放到同一个文件里,如果缺少图片,在这里有:(记着改后缀)

couple.tif

rice.tif

function U()clear;clc;Gray_correction()Gray_level_correction()Piecewise_linear_transformation()Image_smoothing()Image_Sharpening()
end% 灰度修正函数,对pout.tif和tire.tif处理
function Gray_correction()img_p = imread('pout.tif');  % 读取文件img_t = imread('tire.tif');  % 读取文件figure('Name','灰度修正');  % 开一个叫灰度修正的窗口% pout.tifsubplot(2,5, 1);imshow(img_p);title('pout.tif原图');   % 显示原图subplot(2,5, 2);imhist(img_p);title('pout.tif直方图');   % 显示直方图max_p = double(max(img_p(:)));    % 得到像素最大值min_p = double(min(img_p(:)));    % 得到像素最小值subplot(2,5, 3);plot([min_p,max_p],[0,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img2_p = imadjust(img_p,[min_p/255,max_p/255],[]);subplot(2,5, 4);imhist(img2_p);title('pout.tif变换后直方图');   % 显示变换后直方图subplot(2,5, 5);imshow(img2_p);title('pout.tif变换后图像');   % 显示变换后图像% tire.tifsubplot(2,5, 6);imshow(img_t);title('tire.tif原图');   % 显示原图subplot(2,5, 7);imhist(img_t);title('tire.tif直方图');   % 显示直方图m_t = double(median(img_t(:)));    % 中位数k1 = 128/m_t;   % 第一根线的kk2 = 128/(255 - m_t);   % 第二根线的ksubplot(2,5, 8);plot([0,m_t,255],[0,128,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img2_t = (img_t*k1).*uint8(img_t<=m_t)+(img_t*k2+(255*(1-k2))).*uint8(img_t>m_t);subplot(2,5, 9);imhist(img2_t);title('tire.tif变换后直方图');   %显示变换后直方图subplot(2,5,10);imshow(img2_t);title('tire.tif变换后图像');   %显示变换后图像
end% 对pout.tif进行不均匀光照的校正
function Gray_level_correction()img = imread('pout.tif');  % 读取文件
%     img = imread('rice.png');  % 读取文件figure('Name','不均匀光照的校正');  % 开一个叫不均匀光照的校正的窗口subplot(3,3,1);imshow(img);title('pout.tif原图');   % 显示原图subplot(3,3,4);imhist(img);title('pout.tif原图直方图');   % 显示直方图img_1 = blkproc(img,[32,32],'min(x(:))');             % 相当于滤波 大一点不会出现突兀的色块s = size(img_1);if(img_1(s(1),s(2))==0) % blkproc可能会出现黑边img_1 = img_1(1:s(1)-1,1:s(2)-1);endimg_1 = imresize(img_1, size(img), 'bilinear');       % 双线性插值,插到原图大小subplot(3,3,2);imshow(img_1);title('pout.tif背景');   % 显示背景img_1 = imsubtract(img,img_1);  % 图像减法subplot(3,3,3);imshow(img_1);title('pout.tif光照校正图像');   % 显示光照校正图像subplot(3,3,6);imhist(img_1);title('pout.tif校正直方图');   % 显示直方图max_1 = double(max(img_1(:)));    % 得到像素最大值min_1 = double(min(img_1(:)));    % 得到像素最小值subplot(3,3,5);plot([min_1,max_1],[0,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img_2 = imadjust(img_1,[min_1/255,max_1/255],[]);subplot(3,3,9);imhist(img_2);title('pout.tif变换后直方图');   % 显示变换后直方图subplot(3,3,7);imshow(img_2);title('pout.tif变换后图像');   % 显示变换后图像
end% 三段线性变换增强 对couple.tif处理
function Piecewise_linear_transformation()img = imread('couple.tif');  % 读取文件figure('Name','三段线性变换增强');  % 开一个叫三段线性变换增强的窗口subplot(2,3,1);imshow(img);title('couple.tif原图');   % 显示原图subplot(2,3,4);imhist(img);title('couple.tif原图直方图');   % 显示直方图len = numel(img);  % 求一下矩阵的像素数len_3 = len/3;  % 求1/3像素数pt = imhist(img); % 得到各个像素值的像素数c = 0;  % 像素计数x_1 = 0;    % 1/3处x_2 = 0;    % 2/3处for i =[0:255]c = c+pt(i+1);if(c>len_3&&~x_1) % 到了1/3处x_1=double(i); % x_1下当前的数值endif(c>len_3+len_3&&~x_2) % 到了2/3处x_2=double(i); % x_2下当前的数值endendk1 = 85/(x_1-0);b1 = 85-k1*x_1;k2 = 85/(x_2-x_1);b2 = 170-k2*x_2;k3 = 85/(255-x_2);b3 = 255-k3*255;subplot(2,3,5);plot([0,x_1,x_2,255],[0,85,170,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img = double(img);img_1 = uint8(((img*k1+b1).*(img<=x_1)+(img*k2+b2).*((x_1<img)&(img<=x_2))+(img*k3+b3).*(x_2<img)));subplot(2,3,6);imhist(img_1);title('couple.tif变换后直方图');   % 显示变换后直方图subplot(2,3,3);imshow(img_1);title('couple.tif变换后图像');   % 显示变换后图像
end% 图像平滑方法。测试图像为eight.tif
function Image_smoothing()img = imread('eight.tif');  % 读取文件figure('Name','图像平滑');  % 开一个叫图像平滑的窗口subplot(2,4,1);imshow(img);title('eight.tif原图');   % 显示原图img_1 = imnoise(img,'poisson');         % 泊松噪声img_2 = imnoise(img,'salt & pepper');   % 椒盐噪声img_3 = imnoise(img,'gaussian');        % 高斯噪声subplot(2,4,2);imshow(img_1);title('泊松噪声');   % 显示泊松噪声图像subplot(2,4,3);imshow(img_2);title('椒盐噪声');   % 显示椒盐噪声图像subplot(2,4,4);imshow(img_3);title('高斯噪声');   % 显示高斯噪声图像h = 1/9.*[1 1 1;1 1 1;1 1 1];img_1 = filter2(h,img_1);   % 均值滤波img_2 = medfilt2(img_2);    % 中值滤波h = 1/16.*[1 2 1 ;2 4 2 ;1 2 1];img_3 = filter2(h,img_3);   % 高斯滤波subplot(2,4,6);imshow(img_1,[]);title('泊松噪声-均值滤波');   % 显示泊松噪声处理后图像subplot(2,4,7);imshow(img_2,[]);title('椒盐噪声-中值滤波');   % 显示椒盐噪声处理后图像subplot(2,4,8);imshow(img_3,[]);title('高斯噪声-高斯滤波');   % 显示高斯噪声处理后图像
end% 图像锐化方法。测试图像为rice.tif、cameraman.tif
function Image_Sharpening()img_r = imread('rice.png');  % 读取文件img_c = imread('cameraman.tif');  % 读取文件figure('Name','图像锐化');  % 开一个叫图像锐化的窗口subplot(2,5,1);imshow(img_r);title('rice.tif原图');   % 显示原图subplot(2,5,6);imshow(img_c);title('cameraman.tif原图');   % 显示原图subplot(2,5,2);imshow(edge(img_r,'roberts',0.01));title('罗伯茨梯度-R-0.01');subplot(2,5,7);imshow(edge(img_c,'roberts',0.01));title('罗伯茨梯度-C-0.01');subplot(2,5,3);imshow(edge(img_r,'roberts',0.04));title('罗伯茨梯度-R-0.04');subplot(2,5,8);imshow(edge(img_c,'roberts',0.04));title('罗伯茨梯度-C-0.04');subplot(2,5,4);imshow(edge(img_r,'roberts',0.07));title('罗伯茨梯度-R-0.07');subplot(2,5,9);imshow(edge(img_c,'roberts',0.07));title('罗伯茨梯度-C-0.07');subplot(2,5,5);imshow(edge(img_r,'roberts',0.1 ));title('罗伯茨梯度-R-0.1');subplot(2,5,10);imshow(edge(img_c,'roberts',0.1));title('罗伯茨梯度-C-0.1');
end

结果如下:

下面这些是代码里的各个部分,方便复制

灰度修正:

% 灰度修正函数,对pout.tif和tire.tif处理
function Gray_correction()img_p = imread('pout.tif');  % 读取文件img_t = imread('tire.tif');  % 读取文件figure('Name','灰度修正');  % 开一个叫灰度修正的窗口% pout.tifsubplot(2,5, 1);imshow(img_p);title('pout.tif原图');   % 显示原图subplot(2,5, 2);imhist(img_p);title('pout.tif直方图');   % 显示直方图max_p = double(max(img_p(:)));    % 得到像素最大值min_p = double(min(img_p(:)));    % 得到像素最小值subplot(2,5, 3);plot([min_p,max_p],[0,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img2_p = imadjust(img_p,[min_p/255,max_p/255],[]);subplot(2,5, 4);imhist(img2_p);title('pout.tif变换后直方图');   % 显示变换后直方图subplot(2,5, 5);imshow(img2_p);title('pout.tif变换后图像');   % 显示变换后图像% tire.tifsubplot(2,5, 6);imshow(img_t);title('tire.tif原图');   % 显示原图subplot(2,5, 7);imhist(img_t);title('tire.tif直方图');   % 显示直方图m_t = double(median(img_t(:)));    % 中位数k1 = 128/m_t;   % 第一根线的kk2 = 128/(255 - m_t);   % 第二根线的ksubplot(2,5, 8);plot([0,m_t,255],[0,128,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img2_t = (img_t*k1).*uint8(img_t<=m_t)+(img_t*k2+(255*(1-k2))).*uint8(img_t>m_t);subplot(2,5, 9);imhist(img2_t);title('tire.tif变换后直方图');   %显示变换后直方图subplot(2,5,10);imshow(img2_t);title('tire.tif变换后图像');   %显示变换后图像
end

不均匀光照的校正:

% 对pout.tif进行不均匀光照的校正
function Gray_level_correction()img = imread('pout.tif');  % 读取文件
%     img = imread('rice.png');  % 读取文件figure('Name','不均匀光照的校正');  % 开一个叫不均匀光照的校正的窗口subplot(3,3,1);imshow(img);title('pout.tif原图');   % 显示原图subplot(3,3,4);imhist(img);title('pout.tif原图直方图');   % 显示直方图img_1 = blkproc(img,[32,32],'min(x(:))');             % 相当于滤波 大一点不会出现突兀的色块s = size(img_1);if(img_1(s(1),s(2))==0) % blkproc可能会出现黑边img_1 = img_1(1:s(1)-1,1:s(2)-1);endimg_1 = imresize(img_1, size(img), 'bilinear');       % 双线性插值,插到原图大小subplot(3,3,2);imshow(img_1);title('pout.tif背景');   % 显示背景img_1 = imsubtract(img,img_1);  % 图像减法subplot(3,3,3);imshow(img_1);title('pout.tif光照校正图像');   % 显示光照校正图像subplot(3,3,6);imhist(img_1);title('pout.tif校正直方图');   % 显示直方图max_1 = double(max(img_1(:)));    % 得到像素最大值min_1 = double(min(img_1(:)));    % 得到像素最小值subplot(3,3,5);plot([min_1,max_1],[0,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img_2 = imadjust(img_1,[min_1/255,max_1/255],[]);subplot(3,3,9);imhist(img_2);title('pout.tif变换后直方图');   % 显示变换后直方图subplot(3,3,7);imshow(img_2);title('pout.tif变换后图像');   % 显示变换后图像
end

三段线性变换增强:

% 三段线性变换增强 对couple.tif处理
function Piecewise_linear_transformation()img = imread('couple.tif');  % 读取文件figure('Name','三段线性变换增强');  % 开一个叫三段线性变换增强的窗口subplot(2,3,1);imshow(img);title('couple.tif原图');   % 显示原图subplot(2,3,4);imhist(img);title('couple.tif原图直方图');   % 显示直方图len = numel(img);  % 求一下矩阵的像素数len_3 = len/3;  % 求1/3像素数pt = imhist(img); % 得到各个像素值的像素数c = 0;  % 像素计数x_1 = 0;    % 1/3处x_2 = 0;    % 2/3处for i =[0:255]c = c+pt(i+1);if(c>len_3&&~x_1) % 到了1/3处x_1=double(i); % x_1下当前的数值endif(c>len_3+len_3&&~x_2) % 到了2/3处x_2=double(i); % x_2下当前的数值endendk1 = 85/(x_1-0);b1 = 85-k1*x_1;k2 = 85/(x_2-x_1);b2 = 170-k2*x_2;k3 = 85/(255-x_2);b3 = 255-k3*255;subplot(2,3,5);plot([0,x_1,x_2,255],[0,85,170,255]);axis([0 255 0 255]);title('线性变换函数');   %显示线性变换函数img = double(img);img_1 = uint8(((img*k1+b1).*(img<=x_1)+(img*k2+b2).*((x_1<img)&(img<=x_2))+(img*k3+b3).*(x_2<img)));subplot(2,3,6);imhist(img_1);title('couple.tif变换后直方图');   % 显示变换后直方图subplot(2,3,3);imshow(img_1);title('couple.tif变换后图像');   % 显示变换后图像
end

图像平滑方法:

% 图像平滑方法。测试图像为eight.tif
function Image_smoothing()img = imread('eight.tif');  % 读取文件figure('Name','图像平滑');  % 开一个叫图像平滑的窗口subplot(2,4,1);imshow(img);title('eight.tif原图');   % 显示原图img_1 = imnoise(img,'poisson');         % 泊松噪声img_2 = imnoise(img,'salt & pepper');   % 椒盐噪声img_3 = imnoise(img,'gaussian');        % 高斯噪声subplot(2,4,2);imshow(img_1);title('泊松噪声');   % 显示泊松噪声图像subplot(2,4,3);imshow(img_2);title('椒盐噪声');   % 显示椒盐噪声图像subplot(2,4,4);imshow(img_3);title('高斯噪声');   % 显示高斯噪声图像h = 1/9.*[1 1 1;1 1 1;1 1 1];img_1 = filter2(h,img_1);   % 均值滤波img_2 = medfilt2(img_2);    % 中值滤波h = 1/16.*[1 2 1 ;2 4 2 ;1 2 1];img_3 = filter2(h,img_3);   % 高斯滤波subplot(2,4,6);imshow(img_1,[]);title('泊松噪声-均值滤波');   % 显示泊松噪声处理后图像subplot(2,4,7);imshow(img_2,[]);title('椒盐噪声-中值滤波');   % 显示椒盐噪声处理后图像subplot(2,4,8);imshow(img_3,[]);title('高斯噪声-高斯滤波');   % 显示高斯噪声处理后图像
end

图像锐化方法:

% 图像锐化方法。测试图像为rice.tif、cameraman.tif
function Image_Sharpening()img_r = imread('rice.png');  % 读取文件img_c = imread('cameraman.tif');  % 读取文件figure('Name','图像锐化');  % 开一个叫图像锐化的窗口subplot(2,5,1);imshow(img_r);title('rice.tif原图');   % 显示原图subplot(2,5,6);imshow(img_c);title('cameraman.tif原图');   % 显示原图subplot(2,5,2);imshow(edge(img_r,'roberts',0.01));title('罗伯茨梯度-R-0.01');subplot(2,5,7);imshow(edge(img_c,'roberts',0.01));title('罗伯茨梯度-C-0.01');subplot(2,5,3);imshow(edge(img_r,'roberts',0.04));title('罗伯茨梯度-R-0.04');subplot(2,5,8);imshow(edge(img_c,'roberts',0.04));title('罗伯茨梯度-C-0.04');subplot(2,5,4);imshow(edge(img_r,'roberts',0.07));title('罗伯茨梯度-R-0.07');subplot(2,5,9);imshow(edge(img_c,'roberts',0.07));title('罗伯茨梯度-C-0.07');subplot(2,5,5);imshow(edge(img_r,'roberts',0.1 ));title('罗伯茨梯度-R-0.1');subplot(2,5,10);imshow(edge(img_c,'roberts',0.1));title('罗伯茨梯度-C-0.1');
end

利用Matlab进行图像的增强相关推荐

  1. matlab对图像进行增强,利用matlab对图像进行增强处理.doc

    利用matlab对图像进行增强处理.doc 郑州轻工业学院课程设计任务书题目利用MATLAB对图像进行增强处理专业.班级电子信息工程07级学号姓名主要内容.基本要求.主要参考资料等:主要内容:在图像形 ...

  2. matlab 读取照片imread,利用matlab读取图像

    怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...

  3. 怎么用matlab读一张图像,利用matlab读取图像

    怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...

  4. 第四周作业:利用matlab制作图像的二值模板并分别利用模板进行“与模板相与”、“与模板相或”、“与模板异或”操作

    文章目录 第四周作业 第一题 第二题 第四周作业 第一题 题目: 利用 MATLAB 编程,打开自己的一张照片,依次完成下列要求: 1) 以照片的自己作为目标,制作二值模板 2) 分别利用模板进行&q ...

  5. 利用Matlab进行图像的编码与压缩(仿照jpeg)

    本文章包含以下内容: 1.选择matlab自带图像cameraman.tif和westconcordorthophoto.png为编码压缩的测试图像. 2.根据设计要求选择图像编码和压缩方法: 3.设 ...

  6. 利用Matlab进行图像的数字化

    本文章包含以下内容: 1.编程实现不同采样数图像的显示效果: 2.编程实现不同量化等级图像的显示效果: 3.用手机或数码相机采集图像,并分别编程实现数字化. 代码如下:(可全部放到 function ...

  7. 利用Matlab进行图像的复原

    本文章包含以下内容: 1.用点扩散(PSF)函数创建运动模糊图像,修改参数改变模糊程度. a) 无噪声运动模糊图像 b) 有噪声运动模糊图像 2.用维纳滤波复原函数deconvwnr 对模糊图像进行复 ...

  8. 利用 MATLAB 彩色显示高光谱图像(伪彩色,真彩色)

    利用 MATLAB 彩色显示高光谱图像(伪彩色,真彩色) 前言 一.使用imshow函数彩色显示高光谱图像 注意事项: 欢迎学习交流! 邮箱: z-@1-6.com 网站: https://zephy ...

  9. matlabrobert锐化_基于Matlab的图像锐化的研究

    杨虹++吴萌 摘要:在图像处理时,常常需要对图像进行平滑,但是平滑后图像的轮廓往往变的有些模糊,为了改变这一影响,需要对图像进行锐化处理,使图像边缘信息呈现出来.对几种图像锐化的方法进行研究,并且对S ...

最新文章

  1. Jenkins 流水线 获取git 分支列表_基于Jenkins的DevOps流水线实践课程
  2. 对软件工程与计算机科学之间区别的看法
  3. Chrome 的又一个bug?
  4. 1 文巾解题 191. 位1的个数
  5. 从手机App到网点交互请求的日志记录
  6. 用php打出前一天的时间格式,[php]用PHP打印出前一天的时间格式
  7. 小米更新显示非官方rom_魔趣ROM 安装刷入教程(小白新手)
  8. python3 重写、重用、重载
  9. Unknown run configuration type AndroidRunConfigurationType的解决办法
  10. kindeditor 文件上传 java_富文本编辑器kindeditor上传图片的配置方法
  11. GetLastError错误码
  12. 图书销售系统可行性分析报告
  13. 怎样在Apple Silicon M1 Mac上引导到恢复模式
  14. C/C++中的五个预定义的宏名
  15. STN(spatial transformer network)论文与源码理解
  16. 取号机排队取号服务算法(数据结构 队列(Queue))
  17. Open3d读写ply点云文件
  18. 数字摄影测量之特征点提取算法
  19. 向产品宣战——开发者眼中的Android UI Design
  20. C语言及程序设计 实践参考——个人所得税计算器switch语句版

热门文章

  1. 模仿小猎CMS首页功能展示的JS效果
  2. RepositoryService
  3. 基金从业考试形式是什么?
  4. 二维码扫码登录详解【附简易实例代码(html+php+ios)】
  5. 怎样在线生成gif动图?如何将png转换gif动图?
  6. 贝叶斯网专题6:团树传播
  7. 3.计量模型的基础分析流程(数据分析学习DAY4)
  8. Project Israfil -- 支持多个音乐平台的开源音乐服务
  9. web服务器和后端语言的关系
  10. 利用Python完成华氏度和摄氏度的转换