小白一枚,有错误之处还请指出,谢谢~
1、曝光:
1)双重曝光
clc;clear;
picname='xinyi.tif';
picname1='xiaolan.tif';
x=double(imread(picname))/255;
%实现归一化,读入的类型是无符号的8位整型,
%相当于0-255的所有整数,为了计算准确,必须先化为double型。
%再除以255,这样图像矩阵的值全部都在0-1之间。
x1=double(imread(picname1))/255;
subplot(2,2,1);
imshow(x);
title('原图1');
subplot(2,2,2);
imshow(x1);
title('原图2');
alpha=0.3;
picinfo=imfinfo(picname);
for i=1:picinfo.Height
for j=1:picinfo.Width
for k=1:3
Y(i,j,k)=alpha*x(i,j,k)+(1-alpha)*x1(i,j,k);
%a,b是两幅图像,k是系数。由于两幅彩色图像都是三维的,
%所以循环要跑三个方向,进行图片的叠加
end
end
end
subplot(2,2,3);
pause(2)
imshow(Y)
title('双重曝光后的图');
效果图
另一种代码:
im1=imread('1.jpg'); %导入图片1
im2=imread('2.jpg'); %导入图片2
im3=imresize(im2,[1440,1440]);%修改图片2尺寸使得图片1和2等大
im_add=imadd(im1,im3);%图片1和修改后的图片2合成
figure ; subplot(2,2,1) ;
imshow(im1) ;
title('图1');
subplot(2,2,2) ;
imshow(im3);%同时展示图片1和修改后的2
title('图2');
subplot(2,2,[3,4]);
imshow(im_add);%展示合成图片
title('二重曝光后的效果图');
但曝光效果不是很好
2)三重曝光
>> im1=imread('1.jpg');%读取图片
>> im2=imread('2.jpg');
>> im3=imread('3.jpg');
>> im4=imresize(im2,[1048,1200]);%调整图2大小,与图1大小相同
>> im5=imresize(im3,[1048,1200]);%调整图3大小,与图1大小相同
>> im_add=uint8(0.4*im1+0.3*im4+0.3*im5);%按比例放大
>> imshow(im1) ;
>> title('图一');
>> subplot(2,3,2) ;
>> imshow(im4);
>> title('图二');
>> subplot(2,3,3);
>> imshow(im5);
>> title('图三');
>> subplot(2,3,[4,6]);
>> imshow(im_add);
>> title('处理后的效果图');
2、直方图均衡化
clc ;clear
%% 直方图均衡
A = imread('autumn.tif');%读取图像
A=rgb2gray(A);%将图片灰度化
[J,T] = histeq(A);%直方图均衡化,T为直方图的值
%% Image display
figure(1);%建立空白图像
subplot(3, 2, 1);
imshow(A);
title('原图');
subplot(3, 2, [3 4]);
imhist(A);%显示原图的直方图
title('原图的直方图');
subplot(3, 2, 2);%画出均衡化后的图及直方图
imshow(J);
title('均衡化的图');
subplot(3,2, [5 6]);
imhist(J);
title('均衡化后的直方图');
效果图
3、平滑滤波(中值滤波,均值滤波,梯度倒数):加噪声
1)椒盐噪声
clear; close all; clc
%% 图像读取、灰度化与加椒盐噪音
I = imread('xinyi.tif');%读取图像
I=rgb2gray(I);%调用函数,处理图像使之灰度化
J = imnoise(I,'salt & pepper');%椒盐噪声
%% 中值滤波
z_J=medfilt2(J);%中值滤波函数
%% 均值滤波
h0=1/9.*[1 1 1 1 1 1 1 1 1];%定义平滑模板
p_J=filter2(h0,J);
p_J=uint8(p_J);
%% 梯度倒数
t_J=double(J);%转化图像为double型
[GX,GY]=gradient(t_J);%求图像梯度
G=sqrt(GX.*GX+GY.*GY);
%% Image display
figure
subplot(3,2,1),imshow(I);%输出图像
title('原图像')%给原图像加标题
subplot(3,2,2),imshow(J);%输出图像
title('加椒盐噪声后图像')%给原图像加标题
subplot(3,2,3),imshow(z_J);%输出图像
title('中值滤波后图像')%给图像加标题
subplot(3,2,4),imshow(p_J);%输出图像
title('均值滤波后图像')%给图像加标题
subplot(3,2,5),imshow(G/255,[]);%把double类型换回unit8类型输出
title('梯度倒数后图像')
效果图
2)高斯噪声
clear; close all; clc
%% 图像读取、灰度化与高斯噪声
I = imread('xinyi.tif');%读取图像
I=rgb2gray(I);%调用函数,处理图像使之灰度化
J = imnoise(I,'gaussian');%高斯噪声
%% 中值滤波
z_J=medfilt2(J);%中值滤波函数
%% 均值滤波
h0=1/9.*[1 1 1 1 1 1 1 1 1];%定义平滑模板
p_J=filter2(h0,J);
p_J=uint8(p_J);
%% 梯度倒数
t_J=double(J);%转化图像为double型
[GX,GY]=gradient(t_J);%求图像梯度
G=sqrt(GX.*GX+GY.*GY);
%% Image display
figure
subplot(3,2,1),imshow(I);%输出图像
title('原图像')%给原图像加标题
subplot(3,2,2),imshow(J);%输出图像
title('加高斯噪声后图像')%给原图像加标题
subplot(3,2,3),imshow(z_J);%输出图像
title('中值滤波后图像')%给图像加标题
subplot(3,2,4),imshow(p_J);%输出图像
title('均值滤波后图像')%给图像加标题
subplot(3,2,5),imshow(G/255,[]);%把double类型换回unit8类型输出
title('梯度倒数后图像')
效果图
补充:图像噪声的添加为了完成多种图像处理的操作和试验,还可以对图片添加噪声。所用函数为imnoise (I, type),该函数中的type可以为5种噪声参数,分别为:'gaussian'(高斯白噪声),'localvar'(与图象灰度值有关的零均值高斯白噪声),'poisson'(泊松噪声),'salt & pepper'(椒盐噪声)和'speckle'(斑点噪声)。
另一种代码:
1)椒盐噪声+均值滤波
>> im1=imread('11.jfif');
>> im2=rgb2gray(im1);
>> im3=imnoise(im2,'salt & pepper',0.05);
>> im4=MeanFilter(im3);调用函数
>> figure;subplot(121);imshow(im3);subplot(122);imshow(im4);
函数创建(均值滤波)
function [ filtered ] = MeanFilter( noise )
filtered = noise;
h = size(filtered, 1);
w = size(filtered, 2);
for i= 1:h
for j=1:w
up=max(i-1,1);
down=min(i+1,h);
left=max(j-1,1);
right=min(j+1,w);
filtered(i,j)=mean(mean(noise(up:down,left:right)));
end
end
end
2)椒盐噪声+中值滤波
>> im1=imread('11.jfif');
>> im2=rgb2gray(im1);
>> im3=imnoise(im2,'salt & pepper',0.05);
>> im4=MedianFilter(im3);
>> figure;subplot(121);imshow(im3);subplot(122);imshow(im4);
函数(中值滤波)
function [ filtered ] = MedianFilter( noise )
filtered = noise;
h = size(filtered, 1);
w = size(filtered, 2);
for i = 1 : h
for j = 1 : w
up = max(i - 1, 1);
down = min(i + 1, h);
left = max(j - 1, 1);
right = min(j + 1, w);
sub = noise(up : down, left : right);
sub = sub(:);
filtered(i, j) = median(sub);
end
end
end