数字图像处理学习笔记1

#1 rgb图像转变为灰度图像

%将一副真彩色图像转化为灰度图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏
X=imread('tax.png');%将tax文件内容赋值给X
I=rgb2gray(X);%将X转变为灰度图像,然后赋给I
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置
subplot(121),imshow(X);%共1行,2列,其中第一行第一列显示X,即原本RGB图像
subplot(122),imshow(I);%第一行第二列显示转换后的灰度图像

#2 8位伪彩色图像转为灰度图像

%将一副真彩色图像转化为灰度图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏
[X,map]=imread('corn.bmp');%将tax文件内容赋值给X,对应调色板赋值给map
newmap=rgb2gray(map);
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置
figure,imshow(X,map);%显示原本RGB图像
figure,imshow(X,newmap);%显示转换后的灰度图像

此处要注意,输入的图像必须是有RGB三个通道的图像,否则会报错,可以使用画图生成一个256色图像,即伪彩色图像。用#1代码处理#2中的图像同样会报错。

#基于12的尝试

%将一副真彩色图像转化为灰度图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏
X=imread('corn.bmp');%将tax文件内容赋值给X,对应调色板赋值给map
I=im2gray(X);
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置
figure,imshow(I);

尝试了一下使用im2gray函数,可以无视位深度转换为灰度图像。

#3 将灰度图像调整索引数目,也就是调整灰度分级

%将一副真彩色图像转化为灰度图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏
X=imread('tax24.bmp');%将tax文件内容赋值给X
I=rgb2gray(X);%将X转变为灰度图像,然后赋给I

[Y,map]=gray2ind(I,64);%灰度图像向索引图像转换,I后面的数字表示索引表的索引数目

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置


subplot(121),imshow(I);%显示原本RGB图像
subplot(122),imshow(I,map);%显示转换后的灰度图像

视频中老师分了8级,但是讲解时有口误,24位灰度图像和8位灰度图像所包含的信息量没有任何区别,只是三个字节都存储了同一个灰度信息,而gary2ind()函数中,后面的数字含义是将原本的灰度图像变为与gray2ind函数中第二个数字参数等同级数的索引表,也就是将原本的256级灰度变为与数字相同的等级,样例程序中即分为64级。

#4 将灰度图像转换为二值图像

%将灰度图像转换为二值图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏
X=imread('tax24.bmp');%将tax文件内容赋值给X
I=rgb2gray(X);%将X转变为灰度图像,然后赋给I

BW1=im2bw(I,0.4);
BW2=im2bw(I,0.6);

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置


subplot(131),imshow(I);%显示原本RGB图像
subplot(132),imshow(BW1);%显示转换后的灰度图像 
subplot(133),imshow(BW2);%显示转换后的灰度图像 

im2bw中的数字表示阈值,阈值越高,白色部分越少,黑色部分越多,即高于阈值变为白,低于阈值变为黑。

#5 将伪彩色图像转换为黑白图像

%将一副真彩色图像转化为灰度图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏
[X,map]=imread('corn.bmp');%将tax文件内容赋值给X,对应调色板赋值给map
BW=im2bw(X,map,0.6);
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置
figure,imshow(X,map);%显示原本RGB图像,figure用于开窗口
figure,imshow(BW);%显示转换后的灰度图像

im2bw可以直接将伪彩色图像转换为二值图像,不过要注意伪彩色图像在处理的时候需要带着map参数,读取的时候同样也要带map参数。如果不带map参数,同样也能处理,不过处理结果不同。

#6 psnr计算代码尝试

%读取文件
%https://blog.csdn.net/weixin_29732003/article/details/122569893
img1 = imread('文件1完整地址');
img2 = imread('文件2完整地址');
%文件处理
psnr=PSNR(img1,img2)

function [ output ] = PSNR( img1,img2)
%PSNR 峰值信噪比
    if sum(sum(img1-img2)) == 0
        error('Those pictures are the same');
    end
    MAX=16777216;          %图像有多少灰度级,此处的灰度级是直接2^位数吗
    % 归一化
    if (max(max(img1))-min(min(img1))) ~= 0
        img1 = (img1-min(min(img1)))./(max(max(img1))-min(min(img1)));
    end
    if (max(max(img2))-min(min(img2))) ~= 0
        img2 = (img2-min(min(img2)))./(max(max(img2))-min(min(img2)));
    end
    %
    MSE=sum(sum((img1-img2).^2))/(1024*1024);     %图片像素设为1024 x 1024
    output=20*log10(MAX/sqrt(MSE));            %峰值信噪比    
end 

#7(P7) 使用imshow函数在显示的同时限制灰度

%设置灰度级或者设置灰度级上下限来显示图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

X=imread('corn.bmp');%此处的corn.bmp是8位伪彩色图像,对于8位伪彩色图像
%不使用[X,map]=imread('corn.bmp')这种带索引表的方式,而是直接读的话,读到的是
%没有索引表的灰度图像
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[1 1 1]);

subplot(121),imshow(X);
subplot(122),imshow(X,[50,70]);%设置灰度上下限为[50,70],中间值不变,显示该
% 灰度图像,低于50的作黑像素,高于70的作白像素。

imread函数在读取8位伪彩色图像时,如果只用一个数组变量X来读入,也就是X=imread(‘’);则没有读入索引表,导致直接显示X时得到的是没有索引表的灰度图像,而不是伪彩色图像,而且这个灰度图像与伪彩色转灰度rgb2gray函数转换出来的也不是同一个灰度图像。只有用[X,map]来读取,同时显示的时候也要同时带着X和map才能显示出原本的伪彩色图像。而且imshow(X,[x1,x2])这种用法也只对灰度图生效,对真彩色图使用是无效的,也没有imshow(X,map,[x1,x2])这种用法。

#8(p7)利用函数imshow(),image(),imagesc()显示图像进行比较,添加标尺

%利用函数imshow(),image(),imagesc()显示图像进行比较,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

[I,map]=imread('corn.bmp');%此处的corn.bmp是8位伪彩色图像,对于8位伪彩色图像
X=im2gray(I);
%不使用[X,map]=imread('corn.bmp')这种带索引表的方式,而是直接读的话,读到的是
%没有索引表的灰度图像
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[1 1 1]);

subplot(2,2,1),imshow(X);
subplot(2,2,2),image(X);%image()也可用于显示图像,但为什么显示的是蓝黄色?
subplot(2,2,3),image([80,100],[90,170],X);%利用函数image显示
% 坐标后的图像,其中[80,100]是列的标尺,[90,170]是行的标尺
subplot(2,2,4),imagesc(X,[100,150]);%利用函数imagesc()显示
% 经过灰度拉伸后的图像

出现一个问题,可能是因为使用的源文件是8位伪彩色图像,但是已经使用im2gray将伪彩色处理为灰度图像,后续图像都是对灰度图像进行操作,为什么显示出来的图像不是灰度图像而是彩色图像?

#9 利用colorbar()函数添加颜色条

%利用函数imshow()表示图像并添加颜色条,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

[I]=imread('corn.bmp');%此处的corn.bmp是8位伪彩色图像,对于8位伪彩色图像
H=[1 2 1;0 0 0;-1 -2 -1];%设置sobel算子
X=filter2(H,I);%对灰度图像进行二次滤波,实现边缘检测
%不使用[X,map]=imread('corn.bmp')这种带索引表的方式,而是直接读的话,读到的是
%没有索引表的灰度图像
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[1 1 1]);

subplot(2,2,1),imshow(X);
subplot(2,2,2),imshow(X,[]),colorbar();%image()也可用于显示图像,但为什么显示的是蓝黄色?
subplot(2,2,3),imshow(X,[]),colorbar('east');

#10 利用函数montage()同时显示多帧图像序列

%利用函数montage()同时显示多帧图像序列,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

I=zeros(128,128,1,27);%建立一个四维数组,其中所有值均为0

for i=1:27
    [I(:,:,:,i),map]=imread('mri.tif',i);
end

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置
montage(I,map);

#11 利用函数subimage()显示多幅图像

%利用函数subimage()显示多幅图像,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

load trees;%导入图像文件trees.mat,将其中的变量载入workspace中

[X1,map1]=imread('forest.tif');%读取图像信息

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置

subplot(2,2,1),subimage(X,map);
subplot(2,2,2),subimage(X1,map1);%系统提示尽量不要使用subimage而是使用imshow,而且事实证明两个函数没有明显差别,只是subimage显示了标尺
subplot(2,2,3),imshow(X,map);
subplot(2,2,4),imshow(X1,map1);

matlab中自带了很多图像可以直接调用

#12 利用函数impixel()显示图像制定像素信息

%利用函数impixel()显示图像制定像素信息,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

RGB=imread('peppers.png');

c=[10,11,12];%新建一个向量,存放像素纵坐标,%为什么是三维向量?坐标不是一个数字就够了吗
%经过实验得出结论,c是一个向量, r也是一个向量,impixel函数在读取坐标的时候会
%分别从两个向量中的同一位置读取,以本代码中的c和r为例,就是读取[10,20],[11,21],[12,22]中的像素
%两个向量的作用是分别存储横坐标和纵坐标,向量的长度代表所要取的点的数目。
r=[20,21,22];%新建一个向量,存放像素横坐标

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置

pixels1=impixel(RGB)%impixel会打开一个窗口,并等待用户使用鼠标选择图像中的像素
pixels2=impixel(RGB,c,r)

在impixe(RGB,c,r)代码中,c和r两个向量分别存储横坐标与纵坐标,两个向量的长度要相等,向量的长度代表了所取点的个数。

#12 利用函数impixelinfo()显示鼠标所在像素位置以及像素信息

%利用函数impixelinfo()显示鼠标所在像素位置以及像素信息,matlab代码如下:
close all;%关闭当前所有图形窗口
clear all;%清空工作空间变量
clc;%清屏

set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图像默认位置,前两个
%数值是以主屏幕左下角为原点的窗口左下角坐标,后两个数值是宽和高
set(0,'defaultFigureColor',[1 1 1]);%修改图形背景颜色设置,共8种颜色可设置

h=imshow('hestain.png');%显示图像
hp=impixelinfo;%创建图像像素信息显示工具,拖动鼠标,显示所在位置及像素颜色
set(hp,'Position',[20 20 300 20]);%设置像素信息工具显示的位置,默认在左下角


figure
imshow('trees.tif');
impixelinfo     %创建图像像素信息显示工具

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值