matlab读取图片和获得最好对比度图像

写在前面,这是一篇有关于"XX"大学光学"X"程的数值"XX"课作业的讲解汇总,江月年年望相似,作业也是如此。

本人中秋国庆回不了家,无事可干,故于2023年9月30日决定写下该回答,仅供参考,节约诸位时间。如果Anybody因为照抄导致你自己挂科,并且让老师抗拒这种形式的交流,那你是真该死

最后,愿本回答会成为帮助各位师弟、师妹的渡河之桥,更快抵达你的诗和远方

第一部分:实现的功能

A.要求功能一

  1. 从文件夹中读取一幅图像(黑白) (C:\Program
    Files\MATLAB\R2010b\toolbox\images\imdemos\cameraman.tif);
  2. 将图像垂直翻转和水平翻转,分别显示出来并将翻转后的图像保存到桌面上(循环/函数)
  3. 图像类间转换为:将图像转化为double 类型,将double类转
    化为图像类,将灰度图像转化为二值图像(黑白图像);
  4. 用plot绘制图像中间行的数据;
  5. 将整个文件保存为一个Function的m文件 ;

B.要求功能二

  1. 读取peppers.png图像
  2. 将三个图层分别赋值给 f1,f2,f3三个矩阵
  3. 求红色图层与绿色图层的差值,并显示。
  4. 调整显示范围,获得最好对比度图像

第二部分:基本说明

A.用到的函数

imread()

基本用法:
pic_path路径的图片读取为一个矩阵(彩色图为3维矩阵,灰度图为2维矩阵),赋值给pic变量,你需要定义一个图片路径,应用如下:

pic_path = 'cameraman.tif' ;   %输入图片路径
pic = imread(pic_path);        %打开并读取图片

figure()

基本用法:
创建显示的窗口,在matlab中要先创建一个窗口,然后在窗口中作图。可以为窗口命名,为可以用title函数为窗口里的图表命名。应用如下:

figure('Name','窗口名字');    %创建显示的窗口

又或者不为窗口命名

figure();                    %创建显示的窗口

imshow()

基本用法:
将一个矩阵显示为图片,在matlab中要先创建一个窗口。对于灰度图,可以用它来调整显示范围。应用如下:

figure();                    %创建显示的窗口
imshow(pic);                 %显示图片
%imshow (pic, [low, high]);  %调整显示范围,low为可显示的最低值,high为可显示的最高值
%灰度图范围为0-255
imshow (pic, [200255]);    %调整显示范围,200为可显示的最低值,255为可显示的最高值

imwrite()

基本用法:
将一个矩阵保存为 指定路径、指定名字 的图片,要先定义一个路径。应用如下:

win_path = 'C:\Users\DSH\Desktop\';        %输入保存路径--默认是DSH的桌面
imwrite(pic,strcat(win_path,'pic.jpg'));   %保存图片到桌面
%  strcat(win_path,'pic.jpg') 为组合字符串 会成为 'C:\Users\DSH\Desktop\pic.jpg'

其中strcat函数用于组合win_path和’pic.jpg’,你也可以直接写,图片保存位置为C:\Users\DSH\Desktop\ ,图片名字为pic.jpg

%直接写如下
win_path = 'C:\Users\DSH\Desktop\pic.jpg';   %输入保存路径--默认是DSH的桌面
imwrite(pic,win_path);                       %保存图片到桌面

或者

%直接写如下
imwrite(pic,'C:\Users\DSH\Desktop\pic.jpg'); %保存图片到桌面

im2double()、im2uint8()、im2bw()

这些没啥好说的,看一眼就知道了

pic_double = im2double(pic);       %将图片矩阵类转化为double
pic_uint8 = im2uint8(pic_double);  %将double转化为图片矩阵类
pic_bw = im2bw(pic,0.8);           %将灰度图二值化

我解释一下 im2bw(),二值化意思是只有0和1两个值,im2bw是把正常矩阵化为只有0和1的矩阵。其中 im2bw(pic,0.8) 中的pic为图片矩阵,0.8为二值化阈值。0.8对应到灰度值0-255之中,大概是 0.8*255 = 204,灰度图片矩阵中大于204的值变为1,小于或等于204的值变为0。

size()

这个函数可以获得行数hang_shu和列数lie_shu

[hang_shu,lie_shu]=size(pic);     %获得行数hang_shu和列数lie_shu

其他写法

hang_shu = size(pic,1);   %获得行数
lie_shu = size(pic,2);    %获得列数

B.难点思路分析

难点:将图像垂直翻转和水平翻转,分别显示出来并将翻转后的图像保存到桌面上(循环/函数)

1、循环

这不难,你一看就能懂

pic_path = 'cameraman.tif' ;   %输入图片路径
pic = imread(pic_path);        %打开并读取图片
[hang_shu,lie_shu] = size(pic);
 %##############垂直翻转################
for i = 1:fix(hang_shu/2)        
    a = pic(i,:);
    b = pic(hang_shu + 1 - i,:);
    pic(i,:) = b;
    pic(hang_shu + 1 - i,:) = a;
end
 %##############垂直翻转################
figure();                    %创建显示的窗口
imshow(pic);                 %显示图片

2、函数

更简单了,flipdim函数,百度一下,你就知道了

pic_vertical = flipdim(pic,1);  %将灰度图垂直翻转
pic_level = flipdim(pic,2);     %将灰度图水平翻转

3、反向赋值 (老师没给的思路,不建议,可能没分)

pic_path = 'cameraman.tif' ;   %输入图片路径
pic = imread(pic_path);        %打开并读取图片
[hang_shu,lie_shu] = size(pic);
 %##############垂直翻转################
pic_a = pic(hang_shu:-1:1,:);  %反向赋值
 %##############垂直翻转################
figure();                      %创建显示的窗口
imshow(pic_a);                 %显示图片

第三部分:我的作业

第一题

%   文件名:    Function.m
%   版本:      1.0
%   创建时间:  2023年09月12日 星期二 20:32 
%   函数名:    Function
%   功能:      1. 从文件夹中读取一幅图像;
%               2. 将图像垂直翻转和水平翻转,分别显示出来并将翻转后的图像 保存到桌面上
%               3. 图像类间转换为:将图像转化为double 类型,将double类转 化为图像类,将灰度图像转化为二值图像(黑白图像);
%               4. 用plot绘制图像中间行的数据;
%               5. 将整个文件保存为一个Function的m文件 ;


function f_pic = Function()

pic_path = 'cameraman.tif' ;   %输入图片路径
win_path = 'C:\Users\DSH\Desktop\';    %输入保存路径--默认是DSH的桌面

pic_gray = imread(pic_path);    %打开图片

figure('Name','原图');   %创建显示原图的窗口
imshow(pic_gray);   %显示图片

% pic_gray = rgb2gray (pic);  %将图片转化为灰度图
% 
% figure('Name','灰度图');   %创建显示灰度图的窗口
% imshow(pic_gray);   %显示图片

pic_vertical = flipdim(pic_gray,1);  %将灰度图垂直翻转

figure('Name','垂直翻转灰度图');   %创建显示垂直翻转灰度图的窗口
imshow(pic_vertical);   %显示图片
imwrite(pic_vertical,strcat(win_path,'vertical.jpg'));   %保存垂直翻转灰度图到桌面

pic_level = flipdim(pic_gray,2);  %将灰度图水平翻转

figure('Name','水平翻转灰度图');   %创建显示水平翻转灰度图的窗口
imshow(pic_level);   %显示图片
imwrite(pic_level,strcat(win_path,'level.jpg'));   %保存水平翻转灰度图到桌面

pic_double = im2double(pic_gray);  %将图片类转化为double
pic_uint8 = im2uint8(pic_double);  %将double转化为图片类

pic_bw = im2bw(pic_gray,0.8);   %将灰度图二值化

figure('Name','二值图');   %创建显示二值图的窗口
imshow(pic_bw);   %显示图片

pic_gray_numx = size(pic_gray,1);   %行数
pic_gray_numy = size(pic_gray,2);   %列数
pic_gray_y = pic_gray(fix(pic_gray_numx/2),:);

figure('Name','图片中间行图像');   %创建显示图片中间行图像的窗口
plot(1:1:pic_gray_numy,pic_gray_y);  %图片中间行数据

fprintf('hello,world\t--from DSH\n'); %彩蛋


第二题

%   文件名:     DSH_1_2.m
%   版本:       1.0
%   创建时间:   2023年09月13日 星期三 20:32 
%   功能:       1. 读取peppers.png图像
%                2. 将三个图层分别赋值给 f1,f2,f3三个矩阵 
%                3. 求红色图层与绿色图层的差值,并显示。 
%                4. 调整显示范围,获得最好对比度图像


pic_path = 'peppers.png' ;   %输入图片路径

pic = imread(pic_path);    %打开图片

figure('Name','原图');   %创建显示原图的窗口
imshow(pic);   %显示图片

f1 = pic(:,:,1);   %红色图
figure('Name','红色图');   %创建显示红色图的窗口
imshow(f1);   %显示图片

f2 = pic(:,:,2);   %绿色图
figure('Name','绿色图');   %创建显示绿色图的窗口
imshow(f2);   %显示图片

f3 = pic(:,:,3);   %蓝色图
figure('Name','蓝色图');   %创建显示蓝色图的窗口
imshow(f3);   %显示图片

f_dif = f1 - f2 ;
figure('Name','红绿差值图');   %创建显示红绿差值图的窗口
imshow(f_dif);   %显示图片

f_dif_min = min(min(f_dif));   %获得矩阵最小值
f_dif_max = max(max(f_dif));   %获得矩阵最大值
figure('Name','红绿差值图对比度图');   %创建显示红绿差值图对比度图的窗口
imshow(f_dif,[f_dif_min,f_dif_max]);   %显示最好对比度图片

fprintf('hello,world\t--from DSH\n');  %彩蛋
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值