目录
文章目录
前言
一、高斯滤波
二、图片融合
三、RGB图像
通过对图片进行高斯滤波,然后再与原图像进行融合,实现图像的软阴影效果。
高斯滤波的含义:高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的作用:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
对于灰度图像,首先读入带有名字字样图片,然后将图片处理为灰度图gray,再将灰度图进行高斯滤波操作,得到滤波后的图像G,再将滤波后的图像向右下方向各平移15个像素距离,最后将灰度图与平移后的图像进行融合,融合方法是比对两张图片同样像素点的灰度值,灰度值取小融合。即可得到软阴影效果。其中高斯滤波和尺寸为11*11,正态分布标准差为10。
代码如下:
首先对将图像转换为灰度图像
x1=imread('MATLAB.png'); % 读入图片
M = size(x1);
if numel(M)>2 % 转换为灰度图
gray = rgb2gray(x1);
else
gray = x1;
end
然后对灰度图像进行高斯滤波
sigma = 15; % 高斯正态分布标准差
Kernal1 = fspecial('gaussian',[15 15],sigma); % 高斯滤波核 11*11
G = imfilter(gray, Kernal1, 'replicate'); % G为滤波后图像
原图与经过高斯滤波后的图像对比,直观来看经过高斯滤波后的图像有些模糊,使像素间灰度值过度更平滑。
若产生软阴影效果,需要原图与滤波后图像叠加时错开一段像素距离,可将滤波后图像向右下方向平移一段距离,或者向其他方向平移,可呈现出不同的软阴影效果。
将原图与高斯滤波后的图像错位融合
se=translate(strel(1),[15 15]); % 向右下各平移15个像素
x2=imdilate(G,se); % 将滤波后图像进行平移
像素取小融合,即对比两张图片相同像素点的灰度值,选取较小的灰度值作为融合图片在该位置的灰度值,由于本次设计采用白底黑字的图片,所以为了保持白底,融合时字体保留较小值(较黑的部分),融合函数如下,在主程序中调用即可。若读者们想像素值选大融合,将条件语句中的小于号改为大于等于即可。
function w=fmaxmin(x1,x2)
x1=double(x1);
x2=double(x2);
[m,n]=size(x1);
for i=1:m %基于像素值选小的简单图像融合方法
for j=1:n
if x1(i,j)
最后融合后的软阴影效果如下图所示:
在上述中处理灰度图中仅有一个通道,在图像处理中无需考虑三通道间的相互影响,而在RGB图像中,如果向灰度图像一样直接处理,在融合过程中无法识别较小的灰度值,三个通道的灰度值会相互影响,所以RGB图像的软阴影效果需要逐通道处理。
可将原图和高斯滤波后的图像的三通道分别分离出来,再将相对应的通道进行融合,融合好的三个通道再进行合并,即可得到最后结果。
RGB图像软阴影效果处理流程图:
通道分离时,将G、B通道灰度值置零即可得到R通道的图像,同理可得G、B通道。下面以原图的三通道分离为例,经过高斯滤波后的图像三通道分离痛的可得,读者可自行编写:
p1=imread('matlab_rgb.png');
channel1_1=p1;
channel1_2=p1;
channel1_3=p1;
% G B通道的灰度值全部变成0 即可得到R通道图像
channel1_1(:,:,2)=0;
channel1_1(:,:,3)=0;
channel1_2(:,:,1)=0;
channel1_2(:,:,3)=0;
channel1_3(:,:,1)=0;
channel1_3(:,:,2)=0;
图像滤波和平移可参考灰度图的处理方法,不用分离三通道即可完成。
图像融合时仍采用灰度值取小融合,与灰度图不同的是,应注意融合图像的数据类型,灰度图的类型为double型,而RGB融合的图像数据类型为unit8,否则会输出灰度图像。
function w=fmaxmin(x1,x2)
x1=uint8(x1);
x2=uint8(x2);
[m,n,o]=size(x1);
for i=1:m %基于像素值选小的简单图像融合方法
for j=1:n
for k=1:o
if x1(i,j,k)
三通道融合效果图:
最后将融合的三通道进行合并。
chaanel2_1=fmaxmin(channel1_1,channel3_1);
chaanel2_2=fmaxmin(channel1_2,channel3_2);
chaanel2_3=fmaxmin(channel1_3,channel3_3);
p4(:,:,1)=chaanel2_1(:,:,1);
p4(:,:,2)=chaanel2_2(:,:,2);
p4(:,:,3)=chaanel2_3(:,:,3);
figure(3);
subplot 131;imshow(chaanel2_1);title('软阴影图像R通道');
subplot 132;imshow(chaanel2_2);title('软阴影图像G通道');
subplot 133;imshow(chaanel2_3);title('软阴影图像B通道');
RGB图像软阴影效果图如下:
总结
以上是本人初学图像处理心得,欢迎交流指正!
文中代码方法分别取自:http://t.csdn.cn/xYCGe
http://t.csdn.cn/GSI4a
http://t.csdn.cn/BvaNs