前面曾经就介绍过图像处理的一些知识了,这里就MATLAB来介绍一些图像处理的案例。今天算是填一个坑。
图像都在https://gitee.com/lcl1026504480/MATLAB-imgprocess/tree/master/im/%E5%AE%9E%E9%AA%8C%E5%9B%BE%E5%83%8F/%E5%AE%9E%E9%AA%8C%E5%9B%BE%E5%83%8F
里面。
图像处理基本操作与灰度变换
1. 基础知识
1) Matlab支持的图像格式
TIFF, JEPG, GIF, BMP, PNG, XWD (X Window Dump),其中GIF不支持写。
2) 与图像处理相关的最基本函数
读:imread; 写:imwrite; 显示:imshow; 信息查看:imfinfo;
3) Matlab支持的数据类型
double, unit8, int8, uint16, int16, uint32, int32, single, char (2 bytes per element), logical.
4) Matlab支持的图像类型
Intensity images, binary images, indexed images, RGB image
2. 图像信息显示与图像读写
>> imfinfo('parrots.bmp')%%图像文件信息显示
Filename: 'parrots.bmp'
FileModDate: '27-Sep-2010 19:42:59'
FileSize: 1179702
Format: 'bmp'
FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
Width: 768
Height: 512
BitDepth: 24
ColorType: 'truecolor'
……
这是个彩色图像。
>> imfinfo('pollen.tif')%%图像文件信息显示
Filename: 'pollen.tif'
FileModDate: '27-Sep-2010 19:42:59'
FileSize: 250398
Format: 'tif'
FormatVersion: []
Width: 500
Height: 500
BitDepth: 8
ColorType: 'grayscale'
……
这个是灰度图像。
>> img=imread('parrots.bmp');%%读入图像文件到内存变量
>> imshow(img);%%图像显示
>> whos img%%显示变量信息
Name Size Bytes Class
img 512x768x3 1179648 uint8 array
Grand total is 1179648 elements using 1179648 bytes
>> imwrite(img,'NewParrots.png');%%以其它格式另外保存图像
>> img2=imread('pollen.tif');
>> whos img2
Name Size Bytes Class
img2 500x500 250000 uint8 array
Grand total is 250000 elements using 250000 bytes
>> figure, imshow(img2);
3. 直方图显示与均衡化
>> im=imread('pollen.tif');%%读入图像文件
>> size(im)%%观察2维还是3维
ans =%%如果是3维,使用im=im(:,:,1);转成2维
500 500
>> subplot(221), imshow(im)%%显示原图像
>> subplot(222), imhist(im)%%显示直方图
>> im2=histeq(im);%%直方图均衡化
>> subplot(223), imshow(im2)%%显示均衡化后的图像
>> subplot(224), imhist(im2)%%显示均衡化后的图像的直方图
4. 灰度变换
函数形式:J = imadjust(I,[low_in; high_in],[low_out; high_out], Gamma)
参数 Gamma用于指定变换函数形状,小于1时,输出更亮,大于1时,输出更暗。
>> srcimage=imread('chest_xray.tif');%%读入图像文件
>> g1=imadjust(srcimage, [0 1], [0 1], 0.5);%%灰度变换
>> g2=imadjust(srcimage, [0 1], [0 1], 2.5);
>> subplot(1, 3, 1); imshow(srcimage); title ('Source Image');
>> subplot(1, 3, 2); imshow(g1); title ('Gamma=0.5');
>> subplot(1, 3, 3); imshow(g2); title ('Gamma=2.5');
实验
1. 显示不同图像及其直方图,选择chest_xray.tif, pollen.tif和Einstein.png等图像进行直方图均衡化,并显示结果图像和直方图。记录其中一幅图像的原图像、直方图和均衡化后的结果图像与直方图。
2. 选择不同的参数应用灰度变换方法对图像Einstein. png进行增强,观察效果,记录下满意的参数和结果图像。
3. 对图像进行Gamma 变换增强,观察不同Gamma值对增强结果的影响,并分析原因。
原图像及直方图:
直方图均衡化之后的图像及直方图:
显然提高了对比度。
增强的Einstein.png图像参数和结果
命令语句及参数:
>> e=imread('Einstein.PNG');
>> e1=imadjust(e,[0 1],[0 1],0.5);
>> subplot(121),imshow(e);subplot(122),imshow(e1)
结果图像:
不同Gamma值对应的图像增强结果
总结灰度变换中Gamma值对于结果的影响和原因:
γ>1的时候,增强后的图像会比原图像更暗,可以使高灰度值区域分级更明显,低灰度之间的分层基本消失,反之,输出图像会更亮,可以更好的区分低灰度的层次,而使较高灰度的层次几乎消失。从下图可以很好的理解,γ>1的时候输出的灰度值在输入灰度的下方,所以更暗,还可以看到在输入灰度比较高的地方,输出灰度以很陡的斜率增长,而在输入灰度级比较低的地方,斜率很小,因此,低灰度会出现一定程度的输出合并,而高灰度会有输出分层更细的现象。
图像处理应用
读入图像 Problem1.bmp,输出由姓名的拼音和学号组成的结果图像,并把该结果图像缩小后做为水印加到一幅灰度图像的左上角