引言:
作为一个大一狗,刚刚接触计算机编程,居然老师不教我们C语言,教matlab,我也是蛮震惊的。不过了,matlab确实比C语言好玩又好学多了,进阶的也快一点,毕竟全是库函数与工具箱嘛,语法也是很人性化的。
才刚刚大一就得到了一些大神学长的指导,为我们班无偿辅导数据拟合与数组图像处理基础,在这里特别要感谢学长,所以我在的第一篇优快云博客就奉献给这个了,数据拟合与数组图像处理基础的综合应用。
下面步入正题:
先给出我要处理的原图:
我想做的或者说学长要我做的就是要锐化这些个棋子.对于锐化整个图中较为突出的一个物体(即其边界处与背景有较大变化),我们可以先对其进行边缘提取,其方法有多种,就我目前肤浅所知,大致有两种方法:
1:用拉普拉斯算子(例如[-1 -1 -1;-1 8 -1;-1 -1 -1]),调用imfilter函数对图像进行卷积滤波(具体什么原理并不是很清楚,好像是用导数?)可以提取出其边界。
2先用rgb2gray函数把RGB真彩色图转为灰度图,再调用边界提取函数edge,该函数大概有五种边界提取方式,分别是Sober,Prewitt,Roberts,LOG,Canny.各有优缺点吧(具体也不知道),生成二值图。
接着我们将所提取的边界图乘以某个系数(这个系数是依实际效果而定的,反复尝试找一个较合适的),再与原图像相加,就可以得到物体被锐化的图.
两种方法代码如下:
a=imread('E:/图片存放室/1.JPG');
h=[-1 -1 -1;-1 8 -1;-1 -1 -1];%拉普拉斯算子,对图像进行求导,突出其边缘
a1=imfilter(a,h);
a2=a1/2+a;%系数自行设定
a22=rgb2gray(a);
a3=edge(a22,'Canny');
a3(:,:,2)=a3;%将其转为三维数组
a3(:,:,3)=a3(:,:,2);
a3=uint8(a3);%数字类型转换(logic变为uint8型)
a4=a3*60+a;%系数依效果自行设定
figure(1);
subplot(1,3,1);
imshow(a);
title('原图');
subplot(1,3,2);
imshow(a2);
title('imfilter函数拉普拉斯算子滤波处理图');
subplot(1,3,3);
imshow(a4);
title('edge函数Canny提取');
处理后的图像与原图像的对比如图:
可以看到,边界变化较大的物体被突出,但是我们无法选择特