本文学习视频地址:https://www.bilibili.com/video/av68228488?p=8
imread() and imshow()
%%
clear,
I=imread('pout.tif'); %读图像
imshow(I); %显示图像
可以看到这个图像的所有像素点。是从0到255。因为是一个灰阶的图像。
%%
clear;
I=imread('pout.tif');
for i=1:size(I,1) %获取有多少行
for j=1:size(I,2) %获取有多少列
if (rem(i,2)==0 && rem(j,2)==0) %如果i和j为偶数。则使之数据 为0
I(i,j)=0;
end
end
end
imshow(I);
imageinfo() 函数可以查看图像的信息
imtool() 函数可以查看像素信息。
在此工具里选择 Pixel Region
在以下图像算法里的矩阵,必须要两个矩阵相同
imabsdiff(X,Y) | 相对应返回在X中的每个对应元素减去对应Y中的差值,返回绝对值 |
imadd(X,Y) | 相对应返回在X中的每个对应元素加上对应Y中元素的和 |
imapplymatrix(M,X) | 计算M的行与X的颜色通道的线性组合。 |
J = imcomplement(I ) | 计算图像I的补码并以J返回结果。 |
imdivide(X,Y) | 相对应返回在X中的每个对应元素除以对应Y中元素的商 |
| Z = K1*A1 + K2*A2 + ... + Kn*An |
immultiply(X,Y) | 相对应返回在X中的每个对应元素乘以对应Y中元素的结果 |
imsubtract(X,Y) | 将数组Y中的每个元素与数组X中的相应元素相减,然后返回输出数组Z中相应元素的差值。 |
%%
I=imread('pout.tif');
subplot(1,3,1); imshow(I);
title('original drawing');
subplot(1,3,2); J=immultiply(I,1.5);
imshow(J);
title('brighten');
subplot(1,3,3); K=imsubtract(J,I);
imshow(K);
title('dark');
37分钟练习
clear all; clc; %37分钟练习
I=imread('rice.png');
subplot(1,3,1); imshow(I);
subplot(1,3,2); J=immultiply(I,1.5);
imshow(J);
subplot(1,3,3); %这里反差变大,利用的是如果像素超过125,则增加一个数,如果小于,则再减去
for i=1:size(I,1)
for j=1:size(I,2)
if I(i,j) < 125
I(i,j)=I(i,j)-50;
else
I(i,j)=I(i,j)+50;
end
end
end
imshow(I);
imhist() 函数
[counts, binLocations]=imhist(I)
为灰阶图 I 计算 直方图。 在counts 里返回有多少个不同的像素bins, 也就是说你的图里有多少个不同的像素值,就返回多少。在binLocations 里返回每个bins 里的数目。直方图中bin的数量由图像类型决定。
clear all; clc; %41分钟练习
I=imread('rice.png');
subplot(2,3,1); imshow(I); title('原图','FontSize',20);
subplot(2,3,2); J=immultiply(I,1.5);
imshow(J); title('变亮','FontSize',20);
subplot(2,3,3); %这里反差变大,利用的是如果像素超过125,则增加一个数,如果小于,则再减去
for i=1:size(I,1)
for j=1:size(I,2)
if I(i,j) < 125
K(i,j)=I(i,j)-50;
else
K(i,j)=I(i,j)+50;
end
end
end
imshow(K); title('反差变大','FontSize',20);
subplot(2,3,4); imhist(I);ylim([0 1500]); %ylim 是为了好比较三个直方图的数据
subplot(2,3,5); imhist(J);ylim([0 1500]);
subplot(2,3,6); imhist(K);ylim([0 1500]);
histeq()
对灰度图像I进行变换,使输出灰度图像J的长度(hgram) bin直方图与目标直方图hgram近似匹配。
44分钟练习
- 先找到最大值和最小值
- 计算出间距,把这个间距调整到0-255。可以使用 (I-min) *255/distance;
- 给I赋值所有的新值,显示图像。
clear all; clc; % 44分钟练习
max=0; min=300;
I=imread('rice.png');
subplot(2,3,1); imshow(I); title('原图','FontSize',20);
subplot(2,3,2); imhist(I); title('原图直方图','FontSize',20);
subplot(2,3,3); J=histeq(I);imshow(J); title('原图均质后','FontSize',20);
subplot(2,3,4); imhist(J); ylim([1 2000]); title('原图均质图','FontSize',20);
for i=1:size(I,1)
for j=1:size(I,2)
if max<I(i,j)
max=I(i,j)
elseif min>I(i,j)
min=I(i,j)
end
end
end
distance=max-min; %找到原来数据里最大值与最小值的区间
Z=(double(I)-double(min)).*255/double(distance); %先把原来的数据放到从0开始的位置,然后放到0-255的区间
%注意这里必须要先转换再做算法,因为原本I 是uint8的,所以最大值为255。不转换的话,只能到255。
Y=uint8(Z);
subplot(2,3,5);
imhist(Y); title('均质后','FontSize',20);
imrotate()
旋转多少度函数
最后的图像转换不会啊。有哪位大神。
最后发现这个就是给了个矩阵来看下是如何旋转角度的,并不是要自己做出来。
imwrite()
存储函数