利用Matlab进行图像的增强
本文章包含以下内容:
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进行图像的增强相关推荐
- matlab对图像进行增强,利用matlab对图像进行增强处理.doc
利用matlab对图像进行增强处理.doc 郑州轻工业学院课程设计任务书题目利用MATLAB对图像进行增强处理专业.班级电子信息工程07级学号姓名主要内容.基本要求.主要参考资料等:主要内容:在图像形 ...
- matlab 读取照片imread,利用matlab读取图像
怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...
- 怎么用matlab读一张图像,利用matlab读取图像
怎样用matlab读取20张图片并依次展示出来 指定路径下 单个文件夹data中所有图像 P = '.\data\';% 图像文件夹路径 img_path_list = dir(strcat(P,'* ...
- 第四周作业:利用matlab制作图像的二值模板并分别利用模板进行“与模板相与”、“与模板相或”、“与模板异或”操作
文章目录 第四周作业 第一题 第二题 第四周作业 第一题 题目: 利用 MATLAB 编程,打开自己的一张照片,依次完成下列要求: 1) 以照片的自己作为目标,制作二值模板 2) 分别利用模板进行&q ...
- 利用Matlab进行图像的编码与压缩(仿照jpeg)
本文章包含以下内容: 1.选择matlab自带图像cameraman.tif和westconcordorthophoto.png为编码压缩的测试图像. 2.根据设计要求选择图像编码和压缩方法: 3.设 ...
- 利用Matlab进行图像的数字化
本文章包含以下内容: 1.编程实现不同采样数图像的显示效果: 2.编程实现不同量化等级图像的显示效果: 3.用手机或数码相机采集图像,并分别编程实现数字化. 代码如下:(可全部放到 function ...
- 利用Matlab进行图像的复原
本文章包含以下内容: 1.用点扩散(PSF)函数创建运动模糊图像,修改参数改变模糊程度. a) 无噪声运动模糊图像 b) 有噪声运动模糊图像 2.用维纳滤波复原函数deconvwnr 对模糊图像进行复 ...
- 利用 MATLAB 彩色显示高光谱图像(伪彩色,真彩色)
利用 MATLAB 彩色显示高光谱图像(伪彩色,真彩色) 前言 一.使用imshow函数彩色显示高光谱图像 注意事项: 欢迎学习交流! 邮箱: z-@1-6.com 网站: https://zephy ...
- matlabrobert锐化_基于Matlab的图像锐化的研究
杨虹++吴萌 摘要:在图像处理时,常常需要对图像进行平滑,但是平滑后图像的轮廓往往变的有些模糊,为了改变这一影响,需要对图像进行锐化处理,使图像边缘信息呈现出来.对几种图像锐化的方法进行研究,并且对S ...
最新文章
- Ubuntu下使用Anaconda安装opencv 解决无法读取视频
- VC6++ output :error executing c:\windows\system32\cmd.exe.
- ***error*** (zip#Browse) unzip not available on your system
- 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)
- Spring经典面试题
- PTA 01-复杂度2 Maximum Subsequence Sum (25分)
- 习题3.11 递归和非递归查找元素
- word把选择答案弄到题目里_怎样将word中后面的答案和题目合并到一起 - 卡饭网...
- idea 的精准搜索_intellij idea 的全局搜索快捷键方法
- 图像处理:图像二值化原理
- java生成pdf表格并插入图片
- (投影:Projector)Unity5 使用Projector实现纹理投射
- 超硬核!华为智慧屏上的家庭相册竟可以自动精准分类?
- 【pytorch】时间序列预测 —— 同时预测多个分位点
- 授权服务是如何颁发授权码和访问令牌的?
- STM32硬件SPI通过fm17550读取身份证UID,识别银行卡,识别TYPEA与TYPEB
- CC3200 与 CC2530的SPI通信
- Linux基本命令及Linux文件类型
- 【Vue入门实践】Element-UI 树形组件el-tree的组件封装 =>实现组织机构树Tree => 使用vue-content-menu定制可编辑树结构editableTree
- Linux(12)Debain系统安装远程控制软件
热门文章
- 速卖通怎么导出html代码,速卖通商品主图怎么获取下来,如何保存批量速卖通商品主图...
- win7c盘空间越来越小_C盘空间越来越小原因
- 人脸识别(1)--eigenface
- 一文学会 公开课3D勋章实现方案
- 淘宝官方商品API对接
- Cubase Elements 11.0.40 WiN 元素完整版编曲录音软件下载
- LBF特征和增强的LBF特征。
- C#毕业设计——基于C#+asp.net+sqlserver的网上人才招聘系统设计与实现(毕业论文+程序源码)——人才招聘系统
- win10更改UI字体
- 【网络表示学习】BiNE