Matlab 简单图像处理
图像的读入与信息显示
首先肯定是打开matlab软件,在matlab中有很强大的库函数可以供用户直接调用。比如这里要用到的就是 imread() 函数
>>I=imread('/Users/charlieyang/Pictures/opencvtest.jpg'); //读入图片
这里定义了一个I变量,来储存通过imread()函数读入的图片数据。
()里的路径根据所需读入图片而更改,当然也可以加入到Matlab检索路径,这里为了检索严谨,使用了绝对路径。
首先对于不清楚详细信息的图片,我们可以使用imfinfo()函数。
>> imfinfo('/Users/charlieyang/Pictures/opencvtest.jpg') //显示图片信息
则会出现如下信息
可以用imshow()函数先直观的看一下储存在变量I中的这张图片
>> imshow(I,'border','tight') //无边框显示图片
建立三个储存RGB分量的矩阵
图片储存到变量I中,我们接下来的操作其实和读入的图片文件本身其实已经没有任何关联了,接下来的操作也是对变量I在进行,最后储存新图片我们也会是以一种“另存为”的方法,对于文件的修改我们也最好养成这样一个习惯。
我们从上面的详细信息知道colortype是true color,也就是真色彩类型,那么可以知道它有R、G、B三个色彩分量。
那么就建立如下三个矩阵。
>>R=I(:,:,1);
>>G=I(:,:,2);
>>B=I(:,:,3);
为了之后循环变量的方便起见,直接利用size()函数,进行统一赋值
>>[x,y,z]=size(I); //建立矩阵储存三个值
我们知道,图像是由像素组成,每个矩阵里的元素其实就是像素值,接下来要做的就是对矩阵组里每一个元素的数值进行改变。从而起到改变颜色的效果。
>> for i=1:334 //将矩阵组中一段区域变为红色 我的图片是1334x750.所以我随便取了334
for j=1:y
R(i,j) = 255;//红色拉满
G(i,j) = 0;//绿色归零
B(i,j) = 0;//蓝色归零
end
end
新图新的合成
我只是对绿色和蓝色分量进行了简单改变,有复杂操作的,可以在上述代码中继续增加其他操作语句,现在每个矩阵都变成了需要的样子,但他们还是分散的,我们需要把它们集中到一个三维矩阵变量中去。
>> for i=1:x //矩阵组赋值给一个新的总三维矩阵
for j=1:y
I2(i,j,1) = R(i,j);
I2(i,j,2) = G(i,j);
I2(i,j,3) = B(i,j);
end
end
可以看到工作区里已经有很多变量了
再imshow来查看下新的图片
>>figure(2);//新建一个图像窗口 刚刚是1
>> imshow(I2,'border','tight');//无边框方式显示新矩阵
可以看到在figure(2)中现实的图片,已经和原来的在1~334部分去掉了绿色和蓝色分量。
文字添加
在图片中,我们可以添加一下自己的文字或者水印,在matlab中有函数可以使用。
>> text(350,30,'xxxxx-xxx','horiz','center','color','w','FontSize',20);
//在figure(2)上显示文本
注意,此处是把文字添加到figure(2)图像上,而不是添加到变量I2中去了。
所以我们最后要做一个类似于“合并图层”的操作。
新图片的保存与导出
首先,要把这两个显示在figure(2)上的“图层”保存到一个新的变量f中去。
>>f=getframe(figure(2)); //记录图像figure(2)到f中
图片的导出在matlab中同样也有十分简单的库函数可以调用
>>imwrite(f.cdata,'/Users/charlieyang/Pictures/edited.bmp');
//保存图像到xx地址
这样就起到了“另存为”的效果,如果要覆盖原图,就把绝对路径上最后文件的名字改成和原图片一样的名字即可。
总结
简单的小白操作,不是什么特别的教程,主要是为了巩固下新知识,体会下数字图像处理的过程。之后需要用opencv+python以及后续还会用纯C语言来进行数字图像处理。一步步深入图像处理本质一些的东西。也是算是学习算法的一步步入门。