失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MATLAB图像处理1——曝光 直方图均衡化 平滑滤波

MATLAB图像处理1——曝光 直方图均衡化 平滑滤波

时间:2023-07-18 00:32:14

相关推荐

MATLAB图像处理1——曝光 直方图均衡化 平滑滤波

小白一枚,有错误之处还请指出,谢谢~

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.Heightfor j=1:picinfo.Widthfor k=1:3Y(i,j,k)=alpha*x(i,j,k)+(1-alpha)*x1(i,j,k);%a,b是两幅图像,k是系数。由于两幅彩色图像都是三维的,%所以循环要跑三个方向,进行图片的叠加endendendsubplot(2,2,3);pause(2)imshow(Y)title('双重曝光后的图');

效果图

另一种代码:

im1=imread('1.jpg'); %导入图片1im2=imread('2.jpg'); %导入图片2im3=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和修改后的2title('图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 displayfigure(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 displayfiguresubplot(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 displayfiguresubplot(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:hfor j=1:wup=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)));endendend

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 : hfor j = 1 : wup = 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);endendend

如果觉得《MATLAB图像处理1——曝光 直方图均衡化 平滑滤波》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。