• 以下是变换功能的函数：负片变换、对数变化、gamma变换和对比度拉伸变换functiong=intrans(f,varargin)%INTRANS Performs intensity (gray-level) transformations.%G=INTRANS(F,'neg') computes the negative of ...

以下是变换功能的函数：负片变换、对数变化、gamma变换和对比度拉伸变换
function  g=intrans(f,varargin)
%INTRANS Performs intensity (gray-level) transformations.
%G=INTRANS(F,'neg') computes the negative of input image F.
%
%G=INTRANS(F,'log',C,CLASS) computes C*log(1+F) and
%multipies the result by (positive) constant C.If the last two
%parameters are omitted,C defaults to 1.Because the log is used
%frequently to dispiay Frourier spectra,parameter CLASS offers the
%option to specify the class of the output as 'uint8' or
%'unit16'.If parameter CLASS is omitted,the output is of the
%same class as the input.
%
%G=INTRANS(F,'gamma',GAM) Performs a gamma transformation on
%the input image using parameter GAM (a required input).
%
%G=INTRANS(F,'stretch',M,E) computes a contrast-stretching
%transformation using the expression 1./(1+(M./(F+eps)).^E).
%parameter M must be in the range [0,1].The default value for M is
%mean2(im2double(F)),and the default value for E is 4.
%
%For the 'neg','gamma',and 'stretch' transformations,double input
%image whose maximun value is greater than 1 are scaled first using
%MAT2GRAY.Other image are converted to double first using IM2DOUBLE,
%For the 'log' transformation,double image are transformed without being
%scaled;other images are converted to double first using IM2DOUBLE.
%
%The output is of the same class as the input,except if a different class
%is specified for the 'log' option.
%Verify the correct number of inputs.
error(nargchk(2,4,nargin))
%store the class of the input for use later.
classin=class(f);
%If the imput is of class double,and it is outside the range [0,1],
%and the specified transformation is not 'log',convert the input to the
%range [0,1].
if   strcmp(class(f),'double')&max(f(:))>1&~strcmp(varagin{1},'log')
f=mat2gray(f);
else %Convert to double,regardless of class(f).
f=im2double(f);
end %Determine the type of transformation specified.
method=varargin{1};
%Perform the intensity transformation specified.
switch method
case 'neg'
g=imcomplement(f);
case 'log'
if length(varargin)==1
c=1;
elseif length(varargin)==2
c=varargin{2};
elseif length(varargin)==3
c=varargin{2};
classin=varargin{3};
else
error('Incorrect number of inputs for the log option.')
end
g=c*(log(1+double(f)));
case 'gamma'
if length(varargin)<2
error('Not enough inputs for the gamma option.')
end
gam=varargin{2};
case 'stretch'
if length(varargin)==1  %Use defaults.
m=mean2(f);
E=4.0;
elseif length(varargin)==3
m=varargin{2};
E=varargin{3};
else error('Incorrect number of inputs for the stretch option.')
end
g=1./(1+(m./(f+eps)).^E);
otherwise
error('Unknown enhancement method.')
end
g=changeclass(classin,g);%Convert to the class of the input image.
changeclass的M函数如下：
function image=changeclass(class,varargin)
%CHANGCLASS changes the storage class of an image.
%I2=CHANGECLASS(CLASS,I);
%RGB2=CHANGECLASS(CLASS,RGB);
%BW2=CHANGECLASS(CLASS,BW);
%X2=CHANGECLASS(CLASS,X,'indexed');
switch class
case 'unit8'
image=im2uint8(varargin{:});
case 'unit16'
image=im2uint16(varargin{:});
case 'double'
image=im2double(varargin{:});
otherwise
error('Unsupported IPT data class.');
end
我的执行函数和错误如下：
g=intrans(f,'log');
imshow(g);
??? Error using ==> changeclass
Unsupported IPT data class.
Error in ==> intrans at 58
g=changeclass(classin,g);%Convert to the class of the input image.
为什么会这样？？？？总是出现这样的错误，为什么？？？我用的图像详细信息如下：
Filename: 'cyl.jpg'
FileModDate: '22-Sep-2007 13:17:50'
FileSize: 84831
Format: 'jpg'
FormatVersion: ''
Width: 639
Height: 640
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
请高手指点我一下，为什么会出现那样的错误，为什么出现的是不支持IPT数据格式？？？？？

展开全文
• ****************假设某图像数据A(uint8格式)**********************A =235 200 89 20>> double(A) %返回与原矩阵数值相同但... im2double(A)%返回矩阵类型：double；数值范围[0 1] ,0对应uint8中的0；1对应...

****************假设某图像数据A(uint8格式)**********************
A =
235 200 89 20
>> double(A) %返回与原矩阵数值相同但类型为double的矩阵；
ans =
235 200 89 20
>> im2double(A)
%返回矩阵类型：double；数值范围[0 1] ,0对应uint8中的0；1对应uint8中的255；
ans =
0.9216 0.7843 0.3490 0.0784
>> mat2gray(A) %对原矩阵归一化
ans =
1.0000 0.8372 0.3209 0
****************假设矩阵A为一般二维数组，非图像数据(double格式)**********************
A =
235 200 89 20
>> double(A)
ans =
235 200 89 20
>> im2double(A)
ans =
235 200 89 20
>> mat2gray(A)
ans =
1.0000 0.8372 0.3209 0
**********************小结***************************
im2double：如果输入类型是uint8、unit16 、logical，则按照0-->>0，255-->>1，将其值按比例处理成0～1之间的double数值；如果输入类型是double，输出没有处理；
double：返回数值与输入相同的double类型矩阵；
mat2gray：对输入进行归一化处理，最小值-->>0;最大值-->>1，输出类型为double。
在实际的对图像处理过程中，由于我们读入图像是unit8型，而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据。

展开全文
• mat2gray将矩阵转换为灰度图像 语法 描述 例子 将矩阵转换为图像 输入参数 输出参数 mat2gray将矩阵转换为灰度图像 语法 I = mat2gray(A,[amin amax]) I = mat2gray(A) 描述 I = mat2gray...
目录
语法
描述
例子
将矩阵转换为图像

​​​​​​​
mat2gray将矩阵转换为灰度图像

语法

I = mat2gray(A,[amin amax])
I = mat2gray(A)

描述

I = mat2gray(A,[amin amax]) 将矩阵转换为包含0（黑色）到1（白色）范围内的值A的灰度图像 I。 amin和amax中的值 A对应于中的0和1 I。小于的值amin被裁剪为0，大于的值 amax被裁剪为1。

I = mat2gray(A) 设置的值amin，并amax在最小和最大值A。

例子

将矩阵转换为图像

读取图像并显示。
I = imread('rice.png');
figure
imshow(I)

执行返回数字矩阵的操作。此操作查找边缘。
J = filter2(fspecial('sobel'),I);
min_matrix = min(J(:))

min_matrix = -779

max_matrix = max(J(:))

max_matrix = 560
请注意，矩阵的数据类型为double，其值在[0,1]范围之外，包括负值。显示操作结果。 因为矩阵的数据范围超出了imshow的默认显示范围，所以每个具有正值的像素都显示为白色，而每个具有负值或零值的像素都显示为黑色。 看到米粒的边缘非常具有挑战性。
J = filter2(fspecial('sobel'),I);
min_matrix = min(J(:))
figure
imshow(J)

将矩阵转换为图像。 显示图像的最大值和最小值。
K = mat2gray(J);
min_image = min(K(:))

min_image = 0

max_image = max(K(:))

max_image = 1

请注意，值仍然是double类型的数据，但是所有值都在[0，1]范围内。显示转换结果。 像素显示一系列灰度颜色，这使边缘的位置更加明显。

K = mat2gray(J);
min_image = min(K(:))

figure
imshow(K)

输入黑白值，指定为2-元素数字矢量。
输入图像A中小于或等于amin的值映射到强度图像I中的值0。A中大于或等于amax的值映射到I中的值1。
输出强度图像，以数值矩阵形式返回，值在[0，1]范围内。


展开全文
• 出错 mat2gray (line 42) I = imlincomb(delta, A, -limits(1)*delta, 'double'); 出错 main>edgecheck_Callback (line 194) gradiant=mat2gray(G1); 出错 gui_mainfcn (line 95) feval(varargin{:}); 出错 main ...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
错误使用 imlincomb
需要的 输入数目 1, K1, 应为 实数。
出错 imlincomb>ParseInputs (line 140)
validateattributes(varargin{p}, {'double'}, {'real' 'nonsparse'
'scalar'}, ...
出错 imlincomb (line 70)
[ims, scalars, outputClass] = ParseInputs(varargin{:});
出错 mat2gray (line 42)
I = imlincomb(delta, A, -limits(1)*delta, 'double');
出错 main>edgecheck_Callback (line 194)
出错 gui_mainfcn (line 95)
feval(varargin{:});
出错 main (line 42)
gui_mainfcn(gui_State, varargin{:});
代码：
img_src=getappdata(handles.figure1,'img_src');
spt=fspecial('sobel');
Rx=imfilter(double(img_src(:,:,1)),spt,'replicate');
Ry=imfilter(double(img_src(:,:,1)),spt,'replicate');
Gx=imfilter(double(img_src(:,:,2)),spt,'replicate');
Gy=imfilter(double(img_src(:,:,2)),spt,'replicate');
Bx=imfilter(double(img_src(:,:,3)),spt,'replicate');
By=imfilter(double(img_src(:,:,3)),spt,'replicate');
gxx=Rx.^2+Gx.^2+Bx.^2;
gyy=Ry.^2+Gy.^2+By.^2;
gxy=Rx.*Ry+Gx.*Gy+Bx.*By;
theta=0.5*(atan(2*gxy./(gxx-gyy+eps)));
G1=0.5*((gxx+gyy)+(gxx-gyy)).*cos(2*theta)+2*gxy.*sin(2*theta);
theta=theta+pi/2;
G2=0.5*((gxx+gyy)+(gxx-gyy)).*cos(2*theta)+2*gxy.*sin(2*theta);
G1=G1.^0.5;
G2=G2.^0.5;
G1=max(G1,G2);
axes(handles.axes2);
真不知道哪里错了 求大神，，

展开全文
• ## matlab中mat2gray函数用法

万次阅读 多人点赞 2018-05-24 11:08:33
mat2gray是一个计算机函数，功能是实现图像矩阵的归一化操作。 所谓”归一化”就是使矩阵的每个元素的值都在0和1之间。该函数在数字图像处理中经常用到。 函数简介 函数功能: 实现图像矩阵的归一化操作。[1] 所谓...
• 图像类和类型间的转换im2uint8 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为255 其他的所有乘以255im2uint16 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为65535mat2gray 把一个double类的...
• im2double 、mat2gray与double double 就是简单地把一个变量类型转换成double类型，数值大小不变 mat2gray是把一个double类的数组转换成取值范围为[0,1]的归一化double类数组。 函数im2double将输入转换成double类型...
• mat2gray imclose 示例：pandas 是基于NumPy 的一种工具，该工具是为了解决数据分析任务而创建的。 imopen 代码如下（示例）： import numpy as np import pandas as pd import matplotlib.pyplot as plt import ...
• rgb2gray将 RGB 图像或颜色图转换为灰度图 语法 说明 示例 将 RGB 图像转换为灰度图像 将 RGB 颜色图转换为灰度颜色图 输入参数 输出参数 提示 算法 rgb2gray将 RGB 图像或颜色图转换为灰度图 语法 I =...
• 对数变换如下表达式实现： gs = im2uint8(mat2gray(log(1 + double(f)))); 对比度拉伸 变换函数为 matlab 中实现为 g = 1 ./ (1+(m./f).^E) 3、指定任意灰度变换 interp1 实现灰度映射的变换。 g = interp1(z, T, f...
• %RGB通道 mr=mat2gray(im2double(fr)); mg=mat2gray(im2double(fg)); mb=mat2gray(im2double(fb));%数据类型归一化 alf1=1458; %定义标准差alf=a^2/2 a=54 n=161;%定义模板大小 n1=floor((n+1)/2);%计算中心 for i=1...
• function y = mat2huff(x)%MAT2HUFF Huffman encodes a matrix.% Y = MAT2HUFF(X) Huffman encodes matrix X using symbol% probabilities in unit-width histogram bins between X's minimum% and maximum va...
• %Hough变换 figure,imshow(imadjust(mat2gray(h)),'XData',t,'YData',r,'InitialMagnification','fit'),title('Hough变换矩阵');%显示Hough变换矩阵 xlabel('\theta'),ylabel('\rho'); axis on, axis normal,hold ...
• *读取图片 A=imread('F:\Photo.01.png');...HSV=rgb2hsv(A); % rgb2hsv把rgb转化成hsv H=HSV(:,:,1); S=HSV(:,:,2); V=HSV(:,:,3); %可以通过上面三句话看一幅图的HSV三个通道 *SUBPLOT 的用法 subplot
• %使用函数mat2gray Imat2=mat2gray(I0,[cwl,cwh]); imwrite(Imat2,'Imat2.bmp');%另存为 bmp 格式图像 %使用函数imadjust I0=double(I0); I1=double(I0+abs(min(I0(:)))); I2=I1/(max(I1(:))); l=(cwl+abs(min(I0(:...
• 单通道像素值2.多通道像素值OpenCV默认颜色顺序为BGR二.成员公有函数cv::Mat类能够自动管理内存,由矩阵头和指向存储所有像素值的矩阵的指针构成cv::Mat类表示一个n维的密集数值单通道或多通道数组,它可用于存储实数...
• 平时处理图像的时候，很少用到彩色信息，一般...转换灰度图用的cvtColor的第三个参数中有两个参数，我一直没太注意区别，CV_RGB2GRAY与CV_BGR2GRAY。今天通过一个简单的测试区分一下。 测试代码如下： #include ...
• ## OpenCV CV_RGB2GRAY与CV_BGR2GRAY的区别

万次阅读 多人点赞 2018-06-25 17:03:10
转换灰度图用的cvtColor的第三个参数中有两个参数，我一直没太注意区别，CV_RGB2GRAY与CV_BGR2GRAY。今天通过一个简单的测试区分一下。测试代码如下：#include &lt;opencv2\opencv.hpp&gt; using namespace...
• 精品文档 clear;... f=im2bw(f,gray_level); [l,n]=bwlabel(f,8) imshow(f......基于 Matlab 的车辆牌照识别系统* 周志英 【摘要】摘要:介绍了一种基于 Matlab ...进行区域特征参数比较, 提取车...

...