赞
踩
目录
在MATLAB中用于显示图像的窗口有两种:
使用MATLAB图像工具浏览器 (Image Tool Viewer)通过调用函数imtool()来实现;
使用MATLAB的通用图形图像视窗,通过调用函数imshow( )来实现。
图像工具像素信息没设置坐标默认在左下角 ,若需要修改像素信息所在位置,则如下所示:
在MATLAB图像处理工具箱中包含两个函数可以返回用户指定的图像像素的数据值:函数impixel()和函数impixelinfo( )。
这个函数可以返回指定坐标的像素值。它的基本语法是impixel(I,x,y)
,其中I
是图像矩阵,x
和y
是像素的坐标。
函数impixel()可以返回选中像素或像素集的数据值。用户可以直接将像素坐标作为该函数的输入参数或者用鼠标选中像素。
例如:如果我们有一个图像I
,我们想要获取坐标(100,100)的像素值。
value = impixel(I,100,100);
这个函数返回一个结构,其中包含有关图像中特定像素位置的信息。它的基本语法是impixelinfo(I,x,y)
,其中I
是图像矩阵,x
和y
是像素的坐标,这个函数返回的信息包括像素值、颜色、坐标和其他有关像素的信息。
函数impixelinfo的功能是在当前显示的图像中创建一个像素信息工具。这个像素信息工具显示的是鼠标光标所在图像的像素点的信息,并且可以显示该图像窗口中的所有图像中的像素的信息。该像素信息显示工具默认在图像窗口的左下角,其中内容包括两个部分:一是一个字符串“Pixel Info”信息,二是在字符串后的像素。
例如,我们可以使用以下命令来获取有关坐标(100,100)的像素信息。
info = impixelinfo(I,100,100);
点运算将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的灰度值决定,运算结果不会改变图像内像素点之间的空间关系,通常用于调整图像的对比度和亮度。
例如,一个常见的点运算函数是f(x) = ax + b
,其中a
和b
是常数,x
是输入像素值。
这个函数的作用是,对于每一个像素,乘以一个系数a
(通常是一个大于1的数,可以增加对比度),并加上一个常数b
(可以调整亮度)。这个函数将输入图像映射到输出图像,每个输出像素仅由对应的输入像素决定,不会改变像素之间的空间关系。
一些更复杂的点运算可能会改变像素之间的空间关系,例如使用非线性的映射函数或考虑像素之间的相互作用。这是没有特定公式的。点运算的具体形式取决于你选择的函数。上述的f(x) = ax + b
只是一个例子。可以根据需要选择不同的函数进行点运算。
按照灰度变换的数学关系点运算可以分为线性灰度变换、分段线性灰度变换和非线性灰度变换三种。
下面举三个例子说明:
(1)
在灰度图像中,每个像素的值代表了该像素的亮度,而不再包含颜色信息。这是通过将原始彩色图像中的红、绿、蓝三个通道的像素值进行特定的处理和合并来实现的。
先分割颜色通道,将 Img
(一个三通道的彩色图像)赋值给变量 R
、G
和 B。再
去除某些通道的像素值:对于 R
、G
和 B
图像,将特定通道的所有像素值设置为0。接着使用 imadjust
函数对处理后的 R
、G
和 B
图像进行伽马校正。这个函数允许你调整图像的对比度。最后再合并图像通道。
- close all; % 关闭所有打开的图像窗口和图形窗口
- clear all; % 清除工作空间中的所有变量
- clc; % 清除命令窗口中的所有文本
- gamma = 0.5; % 设置伽马值为0.5
- Img = imread('D:\AD\abv.jpg'); % 从指定路径读取一张图片,并存储到Img变量中
- R = Img; % 将原始图像赋值给变量R
- R(:,:,2) = 0; % 将R图像的第二个通道的所有像素值设置为0
- R(:,:,3) = 0; % 将R图像的第三个通道的所有像素值设置为0
- R1 = imadjust(R,[0.4 0.6],[0 1],gamma); % 对R图像进行伽马校正,并将像素值调整到[0 1]范围内
- G = Img; % 将原始图像赋值给变量G
- G(:,:,1) = 0; % 将G图像的第一个通道的所有像素值设置为0
- G(:,:,3) = 0; % 将G图像的第三个通道的所有像素值设置为0
- G1 = imadjust(G,[0 0.5],[0 1],gamma); % 对G图像进行伽马校正,并将像素值调整到[0 1]范围内
- B = Img; % 将原始图像赋值给变量B
- B(:,:,1) = 0; % 将B图像的第一个通道的所有像素值设置为0
- B(:,:,2) = 0; % 将B图像的第二个通道的所有像素值设置为0
- B1 = imadjust(B,[0 0.3],[0 1],gamma); % 对B图像进行伽马校正,并将像素值调整到[0 1]范围内
- Img1 = R1 + G1 + B1; % 将处理后的R、G、B三个图像加在一起,得到最终的图像Img1
- set(0,'defaultFigurePosition',[100,100,1000,500]); % 设置新创建的图形窗口的位置和大小
- set(0,'defaultAxesColor',[1 1 1]); % 设置坐标轴的颜色为白色(RGB值为[1 1 1])
- figure(1); % 创建一个新的图形窗口,窗口编号为1
- subplot(121),imshow(R); % 在该图形窗口中创建一个子窗口,显示处理前的R图像
- subplot(122),imshow(R1); % 在该图形窗口中创建另一个子窗口,显示处理后的R图像
- figure(2); % 创建一个新的图形窗口,窗口编号为2
- subplot(121),imshow(G); % 在该图形窗口中创建一个子窗口,显示处理前的G图像
- subplot(122),imshow(G1); % 在该图形窗口中创建另一个子窗口,显示处理后的G图像
- figure(3); % 创建一个新的图形窗口,窗口编号为3
- subplot(121),imshow(B); % 在该图形窗口中创建一个子窗口,显示处理前的B图像
- subplot(122),imshow(B1); % 在该图形窗口中创建另一个子窗口,显示处理后的B图像
- figure(4); % 创建一个新的图形窗口,窗口编号为4
- subplot(121),imshow(Img); % 在该图形窗口中创建一个子窗口,显示处理前的原始图像
- subplot(122),imshow(Img1); % 在该图形窗口中创建另一个子窗口,显示处理后的最终图像
(2)对图像的每一个像素进行了处理,根据其灰度值的大小进行了不同的变换
- close all; %关闭当前所有图形窗口,包括打开的图像、图表、和图形窗口。
- clear all; %清除工作空间中的所有变量。这将删除所有先前定义的全局变量,局部变量,以及在命令行中输入的变量。
- clc; %清除命令窗口的文本。
-
- R = imread('D:\AD\abv.jpg'); %从指定路径'D:\AD\abv.jpg'读取图像文件,并将图像数据赋值给变量R。imread函数是MATLAB中用于读取图像文件的内置函数。
-
- J = rgb2gray(R); %将读取的RGB图像转换为灰度图像,并将转换后的图像数据赋值给变量J。rgb2gray函数是MATLAB中用于将RGB图像转换为灰度图像的内置函数。
-
- J = im2double(J); %将灰度图像J的数据类型转换为双精度,并将结果赋值回变量J。im2double函数是MATLAB中用于将图像数据转换为双精度的内置函数。
-
- [M,N] = size(J); %获取灰度图像J的尺寸,其中M为图像的行数,N为图像的列数。
-
- for x = 1:M %初始化一个循环,从1开始到M(图像的行数)。
- for y = 1:N %初始化另一个循环,从1开始到N(图像的列数)。
- if (J(x,y) <= 35) %检查当前像素的灰度值是否小于或等于35。
- H(x,y) = J(x,y)*10; %如果条件为真,则将该像素的灰度值乘以10,并将结果赋值给矩阵H的相应位置。
- elseif (J(x,y) > 35 & J(x,y) <= 75) %否则,检查当前像素的灰度值是否大于35且小于或等于75。
- H(x,y) = (10/7) * (J(x,y) - 5) + 50; %如果条件为真,则应用此公式处理该像素的灰度值,并将结果赋值给矩阵H的相应位置。
- else %如果以上条件都不满足,
- H(x,y) = (105/180) * J(x,y) - 75 + 150; %应用此公式处理该像素的灰度值,并将结果赋值给矩阵H的相应位置。
- end %结束条件语句。
- end %结束y循环。
- end %结束x循环。
-
- set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形窗口的默认位置和大小,这里设置的位置为(100,100),窗口大小为1000x500像素。
- set(0,'defaultAxesColor',[1 1 1]); %设置图形的默认背景颜色为白色(RGB值为[1 1 1])。
-
- subplot(121),imshow(J); %创建一个子图窗口,并显示灰度图像J。这里使用了subplot函数来创建子图,并使用imshow函数来显示图像。
- subplot(122),imshow(H); %创建另一个子图窗口,并显示处理后的图像H。这是第二个子图窗口,同样使用了subplot函数和imshow函数。
(3)用rgb2gray
函数处理后在进行对数变换对图像进行灰度变换
- % 关闭所有已打开的图形窗口。
- close all;
-
- % 清除工作空间中的所有变量。
- clear all;
-
- % 清空命令窗口的文本。
- clc;
-
- % 从指定路径'D:\AD\abv.jpg'读取图像文件,并将图像数据赋值给变量R。
- R = imread('D:\AD\abv.jpg');
-
- % 将读取的RGB图像转换为灰度图像,并将转换后的图像数据赋值给变量G。
- G = rgb2gray(R);
-
- % 将灰度图像G的数据类型转换为双精度,并将结果赋值给变量J。
- J = double(G);
-
- % 对双精度图像J进行对数变换,并将变换结果赋值给变量H。其中,对数变换的基数为10,对数变换的结果通过加上1再进行运算,以避免对0取对数造成错误。
- H = (log(J + 1)) / 10;
-
- % 修改图形窗口的默认位置和大小,这里设置的位置为(100,100),窗口大小为1000x500像素。
- set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
-
- % 修改图形背景颜色的设置,这里设置为白色。
- set(0,'defaultAxesColor',[1 1 1]);%修改图形背景颜色的设置
-
- % 在第一个子图窗口中显示双精度图像J。
- subplot(121),imshow(J);
-
- % 在第二个子图窗口中显示对数变换后的图像H。
- subplot(122),imshow(H);
观察右边的值,可以发现为132*132*3等等其他值,后面紧跟着数据类型, 有*3表示该变量是有三种颜色的,其他的都是一种颜色。
(4)优缺点
这三种方法都可以实现彩色图像的灰度化,但它们在处理过程和结果上有一些不同。下面是对这三种方法的优缺点的分析:
方法一:
优点:这种方法可以分别处理R、G、B三个颜色通道,对于每个通道可以单独设置像素值为0,能更精细地控制图像的灰度化。此外,使用imadjust函数进行伽马校正可以调整图像的对比度,使图像更清晰。
缺点:这种方法需要更多的计算资源,因为需要分别处理三个颜色通道,并且每个通道的像素值都需要进行调整。这可能导致处理速度较慢。
方法二:
优点:这种方法对每个像素进行了处理,根据其灰度值的大小进行了不同的变换,可以更准确地控制图像的灰度化。此外,这种方法不需要额外的颜色通道信息,可以直接在原始图像上进行处理。
缺点:这种方法需要更多的计算资源,因为需要对每个像素进行计算。此外,对灰度值进行不同的变换可能需要更复杂的计算和编程。
方法三:
优点:这种方法使用rgb2gray函数将图像转换为灰度图像,然后对灰度图像进行对数变换。这种方法可以快速地将彩色图像转换为灰度图像,并且对数变换可以增强图像的对比度。
缺点:这种方法没有对原始的R、G、B三个通道进行单独处理,可能无法达到方法一和方法二那样的精确控制。此外,对数变换可能会导致一些像素值溢出或小于0,需要进行适当的处理。
总的来说,这三种方法各有优缺点,选择哪种方法取决于具体的应用需求和资源情况。如果需要更精细的控制和更高的精度,可以选择方法一或方法二;如果需要快速地将彩色图像转换为灰度图像,并且增强图像的对比度,可以选择方法三。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。