MATLAB 图像处理实例详解(五)

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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值