——前言——
异常运算分为两种:计算结果溢出和计算结果类型无效。
①计算结果溢出:
不少图像,eg:灰度图、索引色图、二值图像或有限位真彩色图像,其像素都是都范围限制的。咱们在执行多幅图的加减乘除运算时,计算结果极可能会超过有限值范围。例如,两幅256色灰度图在作减法运算时,结果可能为负数;执行加法运算时,像素超过255。这些都属于计算结果溢出。
②计算结果类型无效:
图像数据有不少类型,当咱们用uint8,uint16这样像素要求是整数的图像进行除法运算时,结果多是分数。这是由于图像代数操做函数执行运算时,每每将数据看为double类型。
函数
异常计算结果的修正遵循两个原则:
①超过整数类型有效范围的结果直接截断到限定范围的端点处。
【用uint8做为条件举例】
eg:理论结果是 -12,修正后是0;理论结果是687,修正结果是255.
②对分数计算进行四舍五入。
ui
如今经过示例来演示某图经过加减获得的新图像的运算结果。
例:利用矩阵加法运算增长或减小图像中某种颜色的成分。
clear all;
code
a=imread(‘C:\图片\qiqi.png’);
s=size(a);
b=double(a);
c(:,:,1)=b(:,:,1)+b(:,:,2);
c(:,:,2)=b(:,:,2);
c(:,:,3)=b(:,:,3)-b(:,:,2);
for i=1:s(1)
for j=1:s(2)
for k=1:s(3)
if c(i,j,k)<0
c(i,j,k)=0;
end
if c(i,j,k)>255
c(i,j,k)=255;
end
end
end
end
blogc=uint8( c );
subplot(121);imshow(a);
subplot(122);imshow( c );
索引
结果:
tip:matlab A=(:,1) 和 T =(:,:,1)是什么意思?
A(x,y)表示二维矩阵第x行第y列位置的元素,x为:则表示全部的行。所以,A(:,1)就表示A的第1列的全部元素,这是一个列向量。
T =(:,:,1) :matlab T=(:,:,1)表明第一维、第二维的全部数据,第三维的第一个。
图片