4.1 图像点运算
4.11 线性灰度变换
函数 : imadjust ( )
gamma = 0.5; %调整线性度取值
I = imread('rgb.jpg');
R = I;
R(:,:,2) = 0; %只保留红色通道
R(:,:,3) = 0;
R1 = imadjust(R, [0.5, 0.8], [0, 1], gamma); %调整灰度
G = I;
G(:,:,1) = 0;
G(:,:,3) = 0;
G1 = imadjust(G, [0.5, 0.8], [0, 1], gamma);
B = I;
B(:,:,1) = 0;
B(:,:,2) = 0;
B1 = imadjust(B, [0.5, 0.8], [0, 1], gamma);
I1 = R1 + G1 + B1;
r = figure;
subplot(121),imshow(R);
subplot(122),imshow(R1);
g = figure;
subplot(121),imshow(G);
subplot(122),imshow(G1);
b = figure;
subplot(121),imshow(B);
subplot(122),imshow(B1);
rgb = figure;
subplot(121),imshow(I);
subplot(122),imshow(I1);
是不是最后一张最好看,以后就靠他了
图像代数运算
图像的加法运算
函数 imadd ()
I = imread('rice.png');
J = imread('cameraman.tif');
% imshow(I);
% imshow(J);
K = imadd(I, J);
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);
一幅图每个像素增加亮度
I = imread('rgb.jpg');
J = imadd(I, 30); %添加30的亮度
figure;
subplot(121),imshow(I);
subplot(122),imshow(J);
函数 imnoise ( )
通过对同一幅图像叠加取平均值 , 消除原图像的附加噪声
RGB = imread('eight.tif');
A = imnoise(RGB, 'gaussian', 0, 0.05); %加入了高斯噪声的图像
I = A;
M = 3;
I = im2double(I); %噪声图都转为浮点型
RGB = im2double(RGB); %原图转为浮点型
for i = 1: M
I = imadd(I, RGB); %噪声和原图叠加
end
avg_A = I / (M+1); %叠加求均值
figure;
subplot(121),imshow(A);
subplot(122),imshow(avg_A);
图像的减法
图像减法也称为差分方法 , 是一种常用于检测图像变化及运动物体的图像处理方法.或是混合图像的分离
A = imread('cameraman.tif');
B = imread('testpat1.png');
C = imsubtract(A, B); %两幅图像相减
figure;
imshow(C);
D = imadd(A, B); %两幅图像相加
figure;
imshow(D);
figure;
subplot(121),imshow(D);
subplot(122),imshow(C);
图像乘法运算
一是实现掩膜操作,即屏蔽图像的某些操作 ; 二是如果一幅图像乘以一个常数因子,将改善图像的亮度
改善亮度
A = imread('house.jpg');
B = immultiply(A, 1.5);
C = immultiply(A, 0.5);
figure;
subplot(131);imshow(A);
subplot(132);imshow(B);
subplot(133);imshow(C);
图像的几何变换
图像的平移
move.m
move.m
function J = move(I, a, b)
% 定义一个函数名为move, I表示输入图像,a和b描述图像沿着x轴和y轴移动的距离,
% 不考虑平移后,图像溢出的情况,找不到的地方都赋值为1
[M,N,G] = size(I);
I = im2double(I);
J = ones(M,N,G);
for i=1:M
for j=1:N
if((i+a)>=1&&(i+a)<=M && (j+b)>=1&&(j+b)<=N);
J(i+a, j+b, :)=I(i, j, :);
end
end
end
调用
I = imread('rgb.jpg');
a = 200; b = 200;
J1 = move(I, a, b);
a = -200; b = 200;
J2 = move(I, a, b);
a = 200; b = -200;
J3 = move(I, a, b);
a = -200; b = -200;
J4 = move(I, a, b);
subplot(221),imshow(J1);
subplot(222),imshow(J2);
subplot(223),imshow(J3);
subplot(224),imshow(J4);
图形的镜像
mirror.m
function OutImage = mirror(InImage, n)
%I为输入图像,n=1,2,3,分别为水平,垂直,水平垂直镜像,其他报错.
[M, N, G] = size(InImage);
I = InImage;
J = InImage;
if (n==1)
for i = 1:M
for j = 1:N
J(i, j, :) = I(M-i+1, j, :);
end
end
elseif (n==2)
for i = 1:M
for j = 1:N
J(i, j, :) = I(i, N-j+1, :);
end
end
elseif (n==3)
for i = 1:N
for j = 1:M
J(i, j, :) = I(M-i+1, N-j+1, :);
end
end
else
error('参数n错误,n的取值应为1,2,3') %提示输入错误
end
OutImage = J;
调用mirror.m
I = imread('cameraman.tif');
J1 = mirror(I, 1);
J2 = mirror(I, 2);
J3 = mirror(I, 3);
% J4 = mirror(I, 4);
subplot(221),imshow(J1);
subplot(222),imshow(J2);
subplot(223),imshow(J3);
subplot(224),imshow(I);