小白学习图像处理1——图像的构成和数据类型

一、数字图像的构成

在matlab

1、首先看一张灰度图

  下图使用surf函数将一张随机生成的灰度图立体地展示了出来,可以看到越量的像素点对应的灰度值越大,灰度值在[0-255]之间波动

  实际的灰度图就是用一个二维矩阵存储的,每个元素代表了亮暗程度,数值越大表示越量,上图的代码为:

img = round(rand(30, 30)*255);
img = kron(img, ones(20));

x = 1 : size(img, 1);
y = 1 : size(img, 2);
[X, Y] = meshgrid(x, y);
figure, surf(X, Y, img);
shading interp
colormap('gray');
set(gcf, 'color', [1 1 1])

2、再看一张彩色图

  彩色图片使用3个二维矩阵存储的,每个矩阵分别代表了R、G和B三个分量的强度,对于uint8类型的图片,RGB矩阵的每个元素取值分为为[0-255],不同的RGB组合可以构成2^24中颜色,使用如下代码可以生成一张随机的彩色图:

img = zeros(500, 500, 3, 'uint8');
img(:, :, 1) = kron(round(255*rand(5, 5)), ones(100, 100));
img(:, :, 2) = kron(round(255*rand(5, 5)), ones(100, 100));
img(:, :, 3) = kron(round(255*rand(5, 5)), ones(100, 100));
figure, imshow(img)

第一行表示生成一个500x500x3的矩阵,用来存储RGB三个分量,类型是uint8;2-4行表示讲随机数赋值给RGB三个分量,kron表示将每个像素点放大100倍,于是我们就可以得到随机的彩色像素图啦:
在这里插入图片描述
我们可以使用以下函数,用鼠标点击图像像素点后,按下Enter键显示像素信息:

pixel = impixel(img)


二、图像数据类型

1、灰度图的构成

在数字图像处理中,比较常用的是灰度图,那么灰度图是如何生成的呢,这里给出一个公式:
G r a y = R ∗ 0.299 + G ∗ 0.587 + B ∗ 0.114 Gray = R*0.299 + G*0.587 + B*0.114 Gray=R0.299+G0.587+B0.114
可以看出绿色占的权重很大,这主要是因为人眼对绿色比较敏感

我们不妨使用上面的公式看看效果,注意在程序中,我们需要保证图像是uint8类型,所以需要对公式进行四舍五入。得到的效果和使用rgb2gray函数的效果完全一样:

img = imread('lena_color_512.tif');
R = double(img(:, :, 1));
G = double(img(:, :, 2));
B = double(img(:, :, 3));
Gray = round(R*299 + G*587 + B*114) / 1000;	% 提高计算速度
Gray = uint8(Gray);
figure, imshow(Gray)

在这里插入图片描述


2、uint8类型

  uint8类型的数据取值范围为[0-255]之间的整数,255表示白色,0表示灰色。如果要将一个double类型(取值范围为0-1)的图像转化为uint8类型,则可以通过以下两种方法实现:

img = uint8(img);
img = round(255 * img);

注意:由于uint8数据仅取整数值,所以需要加一个round函数四舍五入


3、double类型

  double类型的图像像素取值范围为[0-1]的小数,0表示黑,1表示白,对图像的处理通常先将图像转化为double类型。

注意:matlab计算得到的图像都是double类型的图像,如果对一个uint8图像处理后直接imshow(),则会发现全白的效果,此时可以先将图像转化为double类型,在进行图像处理

img = imread('xxx.tif');	%uint8
img = im2double(img);
...
imshow(img)

  此外,如果没有先进行类型转换,也可以使用 imshow(img, []) 来自动调整图像范围显示图像!
  注意,上面使用了 im2double() 函数,im2double函数的功能为把unt8类型数据转化为double类型,相当于对图像每个像素点的值除以255;
  如果对double类型数据进行im2double操作,则数据无任何变化!


3、logic类型

  logic类型的图像是一种二值图像,数据只能取0和1,0表示黑,1表示白,在matlab中可以使用以下函数将意图图像转化为二值图像:

img = im2bw(img, threshold);

threshold表示阈值,取值范围为[0, 1]之间的浮点数,所以img应该是double类型图像, 当像素点的值大于阈值则为1,小于阈值则得到0,比如:

img = imread('lena_color_512.tif');
img = im2double(img);
img = im2bw(img, 0.6);
figure, imshow(img)

在这里插入图片描述


4、mat2gray()函数

mat2gray函数可以将任何一组数据归一化到[0, 1],这里的归一化是值归一化后数据最小为0,组大为1,注意,它和im2double不一样,将图像I归一化后得到img,可以通过下面的公式实现:
i m g ( x , y ) = I ( x , y ) − m a x ( I ) m a x ( I ) − m i n ( I ) img(x, y) = \frac{I(x, y) - max(I)}{max(I)-min(I)} img(x,y)=max(I)min(I)I(x,y)max(I)
当图像整体偏黑或者整体偏亮的时候,除了均衡化,还可以试试这个函数!


完结 cheers 🍻

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字图像处理是一门很广泛的学科,学习它需要一定的基础知识和实践经验。以下是一些建议来帮助你学习数字图像处理: 1. 学习基础知识:开始之前,了解数字图像的基础知识是很重要的。学习图像的像素表示、色彩模型、图像采集和处理等基本概念。 2. 学习算法和技术:了解数字图像处理中常用的算法和技术,如滤波、边缘检测、图像增强、图像分割等。掌握这些算法和技术可以帮助你理解和解决实际问题。 3. 学习编程技能:数字图像处理通常需要编程来实现算法和处理图像。选择一种编程语言,如Python或MATLAB,并学习如何使用它们来进行图像处理。 4. 实践项目:通过实践项目来巩固所学的知识。尝试处理不同类型的图像,并应用所学的算法和技术。这样可以帮助你理解概念,并提高你的实践能力。 5. 学习相关工具:数字图像处理领域有许多常用的工具和库,如OpenCV、PIL等。学习如何使用这些工具可以提高你的效率和准确性。 6. 阅读相关文献和教材:数字图像处理领域有很多经典的文献和教材,阅读它们可以帮助你深入理解概念和算法。可以参考一些经典的教材,如《数字图像处理》(Digital Image Processing)。 7. 参与学习社区:加入数字图像处理的学习社区,参与讨论和交流。这样可以与其他学习者和专业人士互相学习和分享经验。 记住,数字图像处理是一个不断发展和演进的领域,持续学习和实践是提高自己的关键。祝你学习顺利!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值