数字图像处理实验记录一(图像基本灰度变换)

文章目录

基础知识

第一次接触这方面的知识,一开始有点措手不及,过了很久才慢慢了解

图像是什么样的?

在matlab中使用imread()函数读取一副彩色图像后我们得到了以下的矩阵

在计算机中,图像就是以这种形式保存的。

1,空间分辨率,灰度分辨率

空间分辨率:图像中可分辨的最小细节,由采样间隔值决定,看起来对清晰度有影响

灰度分辨率:灰度级别中可辨别的最小变化,感觉是黑白色之间过渡的级别

灰度分辨率越小,越黑白

2,灰度图和彩色图的区别

彩色图:每个像素由R,G,B三个分量表示,用三个二维矩阵分别表示各个像素的R,G,B三个颜色分量。

灰度图:每个像素只有一个采样颜色,所以用一个二维矩阵来表示各个像素的采样颜色。

3,什么是灰度直方图?

由此可见,进行灰度变换就是改变灰度值

实验要求

1,按照灰度变换曲线对图像进行灰度变换

2,读入一幅图像,分别对其进行求反变换、对数变换和幂次变换。并显示原图像和变换后图像。

实验记录

任务一:

了解了以上的知识后,这个图也能够看懂了

原图的灰度曲线应该是这个样子的:

是一条过原点斜率为1的曲线
通过以下操作可以将其变成要求的曲线

py 复制代码
%分段
x0=0;y0=0;
x1=48;y1=23;
x2=196;y2=216;
x3=255;y3=255;

%算变换斜率
a1=(y1-y0)/(x1-x0);
a2=(y2-y1)/(x2-x1);
a3=(y3-y2)/(x3-x2);
I2 = I1;
[height,width] = size(I1) %得出图片的高,宽
for row = 1:1:height      %遍历图片矩阵
    for col = 1:1:width
        tmp = I2(row,col);
        if(tmp < x1)
            I2(row,col) = a1*tmp;
        elseif(tmp>=x1&tmp<x2)
            I2(row,col) = a2*(tmp-x1)+y1;
        else
            I2(row,col) = a3*(tmp-x2)+y2;
        end
    end
end
plot(x,y);
hold on
plot([0 x1],[y1 y1],'r--') %画线
plot([x1 x1],[0 y1],'r--') %画线

plot([0 x2],[y2 y2],'r--') %画线
plot([x2 x2],[0 y2],'r--') %画线

hold off


接下来我们就可以通过以上步骤对图像进行操作:

py 复制代码
%分段
x0=0;y0=0;
x1=48;y1=23;
x2=196;y2=216;
x3=255;y3=255;

%算变换斜率
a1=(y1-y0)/(x1-x0);
a2=(y2-y1)/(x2-x1);
a3=(y3-y2)/(x3-x2);
I2 = I1;
[height,width] = size(I1) %得出图片的高,宽
for row = 1:1:height      %遍历图片矩阵
    for col = 1:1:width
        tmp = I2(row,col);
        if(tmp < x1)
            I2(row,col) = a1*tmp;
        elseif(tmp>=x1&tmp<=x2)
            I2(row,col) = a2*(tmp-x1)+y1;
        else
            I2(row,col) = a3*(tmp-x2)+y2;
        end
    end
end

展示结果代码:

py 复制代码
subplot(221);imshow(I1);title('灰度图');
subplot(222);imhist(I1);title('灰度直方图');

subplot(223);imshow(I2);title('灰度变换后图');
subplot(224);imhist(I2);title('灰度直方图');

任务二:

反转变换:

把黑变成白,把白变成黑

公式:

L是灰度级,一般是256

py 复制代码
H=imread('山.png');
Hi = 255-H;
subplot(324);imshow(Hi);title('求反变换');

对数变换:


py 复制代码
I=imread('山.png');
c = 1 %对数因子
I1 = im2double(I);
I3 = uint8(c*log(1+I1*255)/log(256)*255);
subplot(121);imshow(I);title('原图');
subplot(122);imshow(I3);title('对数变换图');

幂次变换:

公式


py 复制代码
gamma = 2.5; % 幂次参数,可根据需要调整
Hgam = c*im2double(H).^gamma;
subplot(326);imshow(Hgam);title('幂次变换');

结果展示

结果1:

结果2:

反转变换:

对数变换:

幂次变换:

反思,总结与收获

1,在matlab中让几幅图片在一个窗口显示

py 复制代码
subplot(121);imshow(I);title('原图');
subplot(122);imshow(Hgam);title('幂次变换图');

subplot(a,b,c);将窗口分割成a行b列后,这个图片在序号为c的位置

序号排序如下:

注意:subplot()函数里面的参数要加,分隔,我没有分隔,是坏习惯

2,title(' ') 标题

在''之间添加文本就可以显示标题了

3,uint8

图像矩阵的数据类型一般是uint8,无符号8位整型数据

4,im2double()函数

将图的uint8矩阵转成double矩阵,要注意的是,这个函数一般会将原来uint8数据从0~255范围映射到0~1范围,所以当你想把它重新转成uint8的时候要乘255

5,matlab判断语句怎么写

py 复制代码
if(条件)
 ...
elseif(条件)
...
else
...
end

6,matlab 循环语句怎么写

py 复制代码
for i = 1:7		%这个代表了从1到7,每次递增1
...
end

for i = 0:2:8   %这个代表了从0到8,每次递增2
...
end

7,清空命令行

py 复制代码
% 在脚本里加入以下语句,在每次运行时会清空命令行
clear all;
clc;
相关推荐
拜小白20 小时前
【论文解读】《DeepPanoContext:用全局场景关系图 + 可微关系优做全景 3D 场景理解
深度学习·计算机视觉·全景图
山顶夕景21 小时前
【VLM】AdaCodec:用“预测视觉码”替代逐帧RGB输入
计算机视觉·视频问答·多模态理解·视觉token压缩
深圳市快瞳科技有限公司1 天前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
zwc32104320551 天前
Day 2:图像内存、数据类型与stride
c++·人工智能·opencv·算法·计算机视觉
誰能久伴不乏1 天前
OpenCV 入门(二):像素访问、ROI 与深浅拷贝
人工智能·opencv·计算机视觉
zwc32104320551 天前
第四周第五天——重构成类
c++·人工智能·opencv·算法·计算机视觉
Solange__1 天前
物流园区怎么用AI生成3D调度预演?从道路底图、车辆转弯到网页评审
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计
椒颜皮皮虾྅1 天前
模型部署不再卡在环境上:DeploySharp 四大推理引擎与 Windows/Linux 离线交付实战
linux·运维·开发语言·人工智能·windows·计算机视觉·cuda
zwc32104320551 天前
Day 5:threshold与inRange阈值分割
c++·图像处理·人工智能·opencv·算法·计算机视觉
拜小白2 天前
【论文解读】ZInD:带标注平面图、360° 全景与 3D 房间布局的 Zillow 室内数据集
深度学习·计算机视觉·全景图