MATLAB:如何用matlab实现二维图像的卷积?? 10C

不是那种直接用函数的
是把一个卷积核通过旋转-平移-相乘-求和这四步后得到的
求代码段

1个回答

假如图像是I,卷积核是X,一般X的size小于I那么:

 fftX0=fft2(X);
fftI=fft2(I);
[H,W]=size(I);
[Hk,Wk]=size(X);
fftX=zeros(H,W);
fftX(1:Hk,1:Wk)=fftX0;
fftIX=fftX.*fftI;
output=ifft2(fftIX);
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
图像中的部分图像块进行卷积化为矩阵之后怎么算图像块里每个像素点的梯度MATLAB

对图像中的部分图像块进行卷积化为矩阵之后怎么算图像块里每个像素点的梯度,我卷积之后就不会了,有MATLAB编码,没有大佬可以帮帮我。 for k=1:length(corners) for i=1:32 for j=1:31 if corners(k).y<=480 && corners(k).x<=480 B(i,j)=A(corners(k).y+i,corners(k).x+j); end end end cov_B=imfilter(B,a,'conv','replicate','same'); cell_B(k)={cov_B}; end

matlab, CNN,步长不为1的卷积实现

通常strides为1的情况下,两矩阵可以通过convn函数实现卷积运算。可是如果步长为4(不为1)的情况下呢?比如AlexNet网络中的C1层,stride=4,这在代码实现中是怎么实现的呢???应该需要自己定义函数然后调用它吧,可具体怎么定义呢?求代码。。。

关于MATLAB的卷积问题

t=0:0.01:2 f=t/2 conv(f,f) plot(conv(f,f))![图片说明](https://img-ask.csdn.net/upload/201605/21/1463791958_33485.jpg) 这个图片横纵坐标怪怪的,为什么会那么大 还有 t=0:0.01:10 f1=cos(t) f2=heaviside(t-1) f=conv(f1,f2) subplot(1,3,1) plot(t,f1) subplot(1,3,2) plot(t,f2) subplot(1,3,3) plot(f) 卷积出来的函数图像好奇怪,怎么办

请问matlab里自带的deconvblind函数运用的是哪种盲解卷积的算法,求原理过程~~~

% Parse inputs to verify valid function calling syntaxes and arguments [J,P,NUMIT,DAMPAR,READOUT,WEIGHT,sizeI,classI,sizePSF,FunFcn,FunArg] = ... parse_inputs(varargin{:}); % 1. Prepare parameters for iterations % % Create indexes for image according to the sampling rate idx = repmat({':'},[1 length(sizeI)]); wI = max(WEIGHT.*(READOUT + J{1}),0);% at this point - positivity constraint fw = fftn(WEIGHT); clear WEIGHT; DAMPAR22 = (DAMPAR.^2)/2; % 2. L_R Iterations % lambda = 2*any(J{4}(:)~=0); for k = (lambda + 1) : (lambda + NUMIT), % 2.a Make an image and PSF predictions for the next iteration if k > 2,% image lambda = (J{4}(:,1).'*J{4}(:,2))/(J{4}(:,2).'*J{4}(:,2) + eps); lambda = max(min(lambda,1),0); % stability enforcement lambda(0,1)之间 end Y = max(J{2} + lambda*(J{2} - J{3}),0);% image positivity constraint if k > 2,% PSF lambda = (P{4}(:,1).'*P{4}(:,2))/(P{4}(:,2).'*P{4}(:,2) + eps); lambda = max(min(lambda,1),0);% stability enforcement end B = max(P{2} + lambda*(P{2} - P{3}),0);% PSF positivity constraint sumPSF = sum(B(:)); B = B/(sum(B(:)) + (sumPSF==0)*eps);% normalization is a necessary constraint, % because given only input image, the algorithm cannot even know how much % power is in the image vs PSF. Therefore, we force PSF to satisfy this % type of normalization: sum to one. % 2.b Make core for the LR estimation CC = corelucy(Y,psf2otf(B,sizeI),DAMPAR22,wI,READOUT,1,idx,[],[]); % 2.c Determine next iteration image & apply positivity constraint J{3} = J{2}; H = psf2otf(P{2},sizeI); scale = real(ifftn(conj(H).*fw)) + sqrt(eps); J{2} = max(Y.*real(ifftn(conj(H).*CC))./scale,0); clear scale; J{4} = [J{2}(:)-Y(:) J{4}(:,1)]; clear Y H; % 2.d Determine next iteration PSF & apply positivity constraint + normalization P{3} = P{2}; H = fftn(J{3}); scale = otf2psf(conj(H).*fw,sizePSF) + sqrt(eps); P{2} = max(B.*otf2psf(conj(H).*CC,sizePSF)./scale,0); clear CC H; sumPSF = sum(P{2}(:)); P{2} = P{2}/(sumPSF + (sumPSF==0)*eps); if ~isempty(FunFcn), FunArg{1} = P{2}; P{2} = feval(FunFcn,FunArg{:}); end; P{4} = [P{2}(:)-B(:) P{4}(:,1)]; end clear fw wI; % 3. Convert the right array (for cell it is first array, for notcell it is % second array) to the original image class & output the whole num = 1 + strcmp(classI{1},'notcell'); if ~strcmp(classI{2},'double'), J{num} = images.internal.changeClass(classI{2},J{num}); end if num == 2,% the input & output is NOT a cell P = P{2}; J = J{2}; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Function: parse_inputs function [J,P,NUMIT,DAMPAR,READOUT,WEIGHT,sizeI,classI,sizePSF,FunFcn,FunArg] ... = parse_inputs(varargin) % % Outputs: % I=J{1} the input array (could be any numeric class, 2D, 3D) % P=P{1} the operator that distorts the ideal image % % Defaults: % NUMIT=[];NUMIT_d = 10; % Number of iterations, usually produces good % result by 10. DAMPAR =[];DAMPAR_d = 0;% No damping is default WEIGHT =[]; % All pixels are of equal quality, flat-field is one READOUT=[];READOUT_d= 0;% Zero readout noise or any other % back/fore/ground noise associated with CCD camera. % Or the Image is corrected already for this noise by user. FunFcn = '';FunFcn_d = ''; FunArg = {};FunArg_d = {}; funnum = [];funnum_d = nargin+1; narginchk(2,inf);% no constraint on max number % because of FUN args % First, assign the inputs starting with the cell/not cell image & PSF switch iscell(varargin{1}) + iscell(varargin{2}), case 0, % no-cell array is used to do a single set of iterations classI{1} = 'notcell'; J{1} = varargin{1};% create a cell array in order to do the iterations P{1} = varargin{2}; case 1, error(message('images:deconvblind:IandInitpsfMustBeOfSameType')) case 2,% input cell is used to resume the interrupted iterations or classI{1} = 'cell';% to interrupt the iteration to resume them later J = varargin{1}; P = varargin{2}; if length(J)~=length(P), error(message('images:deconvblind:IandInitpsfMustBeOfSameSize')) end end; % check the Image, which is the first array of the J-cell [sizeI, sizePSF] = padlength(size(J{1}), size(P{1})); classI{2} = class(J{1}); validateattributes(J{1},{'uint8' 'uint16' 'double' 'int16' 'single'},... {'real' 'nonempty' 'finite'},mfilename,'I',1); if prod(sizeI)<2, error(message('images:deconvblind:inputImageMustHaveAtLeast2Elements')) elseif ~isa(J{1},'double'), J{1} = im2double(J{1}); end % check the PSF, which is the first array of the P-cell validateattributes(P{1},{'uint8' 'uint16' 'double' 'int16' 'single'},... {'real' 'nonempty' 'finite' 'nonzero'},mfilename,'INITPSF',2); if prod(sizePSF)<2, error(message('images:deconvblind:initPSFMustHaveAtLeast2Elements')) elseif ~isa(P{1},'double'), P{1} = double(P{1}); end % now since the image&PSF are OK&double, we assign the rest of the J & P cells len = length(J); if len == 1,% J = {I} will be reassigned to J = {I,I,0,0} J{2} = J{1}; J{3} = 0; J{4}(prod(sizeI),2) = 0; P{2} = P{1}; P{3} = 0; P{4}(prod(sizePSF),2) = 0; elseif len ~= 4,% J = {I,J,Jm1,gk} has to have 4 or 1 arrays error(message('images:deconvblind:inputCellsMustBe1or4ElementNumArrays')) else % check if J,Jm1,gk are double in the input cell if ~all([isa(J{2},'double'),isa(J{3},'double'),isa(J{4},'double')]), error(message('images:deconvblind:ImageCellElementsMustBeDouble')) elseif ~all([isa(P{2},'double'),isa(P{3},'double'),isa(P{4},'double')]), error(message('images:deconvblind:psfCellElementsMustBeDouble')) end end; % Second, Find out if we have a function to put additional constraints on the PSF % function_classes = {'inline','function_handle','char'}; idx = []; for n = 3:nargin, idx = strmatch(class(varargin{n}),function_classes); if ~isempty(idx), [FunFcn,msgStruct] = fcnchk(varargin{n}); %only works on char, making it inline if ~isempty(msgStruct) error(msgStruct) end FunArg = [{0},varargin(n+1:nargin)]; try % how this function works, just in case. feval(FunFcn,FunArg{:}); catch ME Ftype = {'inline object','function_handle','expression ==>'}; Ffcnstr = {' ',' ',varargin{n}}; error(message('images:deconvblind:userSuppliedFcnFailed', Ftype{ idx }, Ffcnstr{ idx }, ME.message)) end funnum = n; break end end if isempty(idx), FunFcn = FunFcn_d; FunArg = FunArg_d; funnum = funnum_d; end % % Third, Assign the inputs for general deconvolution: % if funnum>7 error(message('images:validate:tooManyInputs',mfilename)); end switch funnum, case 4,% deconvblind(I,PSF,NUMIT,fun,...) NUMIT = varargin{3}; case 5,% deconvblind(I,PSF,NUMIT,DAMPAR,fun,...) NUMIT = varargin{3}; DAMPAR = varargin{4}; case 6,% deconvblind(I,PSF,NUMIT,DAMPAR,WEIGHT,fun,...) NUMIT = varargin{3}; DAMPAR = varargin{4}; WEIGHT = varargin{5}; case 7,% deconvblind(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT,fun,...) NUMIT = varargin{3}; DAMPAR = varargin{4}; WEIGHT = varargin{5}; READOUT = varargin{6}; end % Forth, Check validity of the gen.conv. input parameters: % % NUMIT check number of iterations if isempty(NUMIT), NUMIT = NUMIT_d; else %verify validity validateattributes(NUMIT,{'double'},... {'scalar' 'positive' 'integer' 'finite'},... mfilename,'NUMIT',3); end % DAMPAR check damping parameter if isempty(DAMPAR), DAMPAR = DAMPAR_d; elseif (numel(DAMPAR)~=1) && ~isequal(size(DAMPAR),sizeI), error(message('images:deconvblind:damparMustBeSizeOfInputImage')); elseif ~isa(DAMPAR,classI{2}), error(message('images:deconvblind:damparMustBeSameClassAsInputImage')); elseif ~strcmp(classI{2},'double'), DAMPAR = im2double(DAMPAR); end if ~isfinite(DAMPAR), error(message('images:deconvblind:damparMustBeFinite')); end % WEIGHT check weighting if isempty(WEIGHT), WEIGHT = ones(sizeI); else numw = numel(WEIGHT); validateattributes(WEIGHT,{'double'},{'finite'},mfilename,'WEIGHT',5); if (numw ~= 1) && ~isequal(size(WEIGHT),sizeI), error(message('images:deconvblind:weightMustBeSizeOfInputImage')); elseif numw == 1, WEIGHT = repmat(WEIGHT,sizeI); end; end % READOUT check read-out noise if isempty(READOUT), READOUT = READOUT_d; elseif (numel(READOUT)~=1) && ~isequal(size(READOUT),sizeI), error(message('images:deconvblind:readoutMustBeSizeOfInputImage')); elseif ~isa(READOUT,classI{2}), error(message('images:deconvblind:readoutMustBeSameClassAsInputImage')); elseif ~strcmp(classI{2},'double'), READOUT = im2double(READOUT); end if ~isfinite(READOUT), error(message('images:deconvblind:readoutMustBeFinite')); end;

新手请问,Matlab里有关于卷积神经网络的BP算法可直接调用的函数或文件吗?麻烦大神求告知

对Matlab不熟,在学习卷积神经网络BP算法,想请问Matlab里有没有可调用的文件或函数直接拿来用的

深度学习图像分类卷积神经网络

怎么用CNN模型实现图像分类,caffe中使用python接口,求详细程序

有关图像卷积处理的疑惑,望解答

现用模板对图像进行卷积操作,处理之后图像大小改变,怎样使卷积后的图像尺寸不变呢?

lecun关于卷积神经网络的matlab代码怎么训练和测试,要改哪些?

运行里面M文件出现 1、错误使用 readMNIST (line 28) 训练集的MNIST不见了。请从http://yann.lecun.com/exdb/mnist/下载它和投入./ MNIST文件夹 readMNIST的一部分: %检查MNIST数据集 addpath('C:\Users\faschou\Desktop\CNN\MNIST');%MNIST数据及其读取程序所在的目录 path =' .\MNIST\train-images.idx3-ubyte'; if(~exist(path,'file')) error('训练集的MNIST不见了。请从http://yann.lecun.com/exdb/mnist/下载它和投入./ MNIST文件夹'); end fid = fopen(path,'r','b'); %大端法(就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。) magicNum = fread(fid,1,'int32'); % 幻数 if(magicNum~=2051) display('Error: cant find magic number'); return; end 2、出错 train_cnn (line 30) [I,labels,I_test,labels_test] = readMNIST(1000); 文件里那部分: %Load the digits into workspace [I,labels,I_test,labels_test] = readMNIST(1000); %%

为什么求对卷积核导数时要把输入矩阵或者被卷积矩阵旋转180

**在卷积网络反向传播最后一步,即求权值更新量时, 用误差矩阵卷积上一层的输出,会把这个输出矩阵旋转180度,为什么,没想明白?**

关于使用卷积神经网络训练图像识别需要图像集的数量

请问使用卷积神经网络训练图像识别,一般需要多少张图像?一般需要包含多少图像块? 请问大家一般是如何获取这些训练用的图片?感觉ImageNet速度太慢了,国内有没有ImageNet的镜像,或者其他的图像资源网站,多谢了!有没有自己做训练用的图片的?

深度卷积神经网络的输入可以是手工提取的特征吗?

苦逼CS研究生开题,是做遥感图像建筑物提取的,有两个研究内容,一个是手动提特征,另外一个是用深度神经网络进行训练,最后是识别出建筑物,但是一般来说卷积神经网络的输入一般是二维图像,然后自动提取特征,再进行分类。那么能否把输入换成已经提取的特征呢,比如能量、长宽比、LBP、Gabor特征等,然后把这些特征转化为二维图像的格式作为输入,重新训练神经网络,最后进行识别呢?

使用TensorFlow的卷积神经网络算法实现图片分类

环境:Ubuntu 14.04.5 LTS, Python3.4 参考代码:http://blog.csdn.net/kkk584520/article/details/51477537 我的代码:参考上述代码逻辑进行我自己的图片分类,修改点:1、修改读取数据的接口,来读取自己的数据集,数据集结构和mnist的数据集结构完全一致,2、修类别又10修改为47,将IMAGE_SIZE修改为1920(图片的大小为1920*1920),运行时报错如下:InvalidArgumentError (see above for traceback): Incompatible shapes: [2,47] vs. [3200,47]

pytorch利用反卷积的尺寸问题

大家好,新手入门语义分割,在利用pytorch实现Linknet的时候,在编码层最后输出的尺寸为6×10(上一层为12× 20),文中规定反卷积核的尺寸为k为3× 3,步长s = 2,利用反卷积求输出尺寸的大小为N(out) = (N(in)-1)× s +k -2p,如果按照这个核的尺寸大小进行计算的话,输出的大小就不会是我想要的12× 20,而是11× 19(padding=1)或13 ×21(padding=0),问了学长说是卷积的核的尺寸一般都为奇数最好不要修改,(论文里的也是奇数3 ×3 的),这个好像说是用keras框架写就不会有这个问题,但是现在我用的是pytorch,请问这个应该如何解决?

贝叶斯回归的matlab编程问题

请问各位大神,贝叶斯回归的matlab程序怎么编写啊?中间的MH算法如何实现

卷积的C++实现的代码问题

在matlab中碰到了conv这个卷积函数,可是却要求用c++来做,有谁知道该怎么用c++写实现卷积的代码吗

基于卷积神经网络的图像检索系统,至少要用几层网络

想要完成基于卷及神经网络的图像检索系统,至少要用几层神经网络???

LIC(线积分卷积)源代码,怎么结合具体图像怎么使用?

运行没有错误,刚接触图形学,不知道如何使用这段代码。 /*----------------------------------------------------------*/ /* 代码参考如下链接: */ /* http://www.zhanpingliu.org/Research/FlowVis/LIC/LIC.htm */ /* */ /*----------------------------------------------------------*/ #include <math.h> #include <stdio.h> #include <stdlib.h> #define SQUARE_FLOW_FIELD_SZ 400 #define DISCRETE_FILTER_SIZE 2048 //卷积核的对应项,如果太小的话有些采样点就没有被卷积进去,影响图像效果 #define LOWPASS_FILTR_LENGTH 32.00000f #define LINE_SQUARE_CLIP_MAX 100000.0f //只要大于等于0就行,等于0时会出现黑色线条 #define VECTOR_COMPONENT_MIN 0.050000f /*----------------------------------------------------------------------------------------------*/ void SyntheszSaddle(int n_xres, int n_yres, float* pVector); void NormalizVectrs(int n_xres, int n_yres, float* pVector); void GenBoxFiltrLUT(int LUTsiz, float* p_LUT0, float* p_LUT1); void MakeWhiteNoise(int n_xres, int n_yres, unsigned char* pNoise); void FlowImagingLIC(int n_xres, int n_yres, float* pVector, unsigned char* pNoise, unsigned char* pImage, float* p_LUT0, float* p_LUT1, float krnlen); void WriteImage2PPM(int n_xres, int n_yres, unsigned char* pImage, char* f_name); /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void main() { int n_xres = SQUARE_FLOW_FIELD_SZ; int n_yres = SQUARE_FLOW_FIELD_SZ; float* pVectr = (float* )malloc( sizeof(float ) * n_xres * n_yres * 2 ); float* p_LUT0 = (float* )malloc( sizeof(float ) * DISCRETE_FILTER_SIZE); float* p_LUT1 = (float* )malloc( sizeof(float ) * DISCRETE_FILTER_SIZE); unsigned char* pNoise = (unsigned char*)malloc( sizeof(unsigned char) * n_xres * n_yres ); unsigned char* pImage = (unsigned char*)malloc( sizeof(unsigned char) * n_xres * n_yres ); SyntheszSaddle(n_xres, n_yres, pVectr); // NormalizVectrs(n_xres, n_yres, pVectr);//数据不规整一下的话,速度越小的地方噪声越强 MakeWhiteNoise(n_xres, n_yres, pNoise); GenBoxFiltrLUT(DISCRETE_FILTER_SIZE, p_LUT0, p_LUT1); FlowImagingLIC(n_xres, n_yres, pVectr, pNoise, pImage, p_LUT0, p_LUT1, LOWPASS_FILTR_LENGTH); WriteImage2PPM(n_xres, n_yres, pImage, "LIC.ppm"); free(pVectr); pVectr = NULL; free(p_LUT0); p_LUT0 = NULL; free(p_LUT1); p_LUT1 = NULL; free(pNoise); pNoise = NULL; free(pImage); pImage = NULL; } /*----------------------------------------------------------------------------------------------*/ /*合成数据----------------------------------------------------*/ void SyntheszSaddle(int _row, int _col, float* pVectr) { int row = 400, col = 400, index = 0; float vec_x = 0.0f, vec_y = 0.0f, vcMag = 0.0f, scale = 0.0f; for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { // 数据生成 index = i * col + j;// 中心矢量场 // index = (row - 1 - i) * col + j;// 马鞍矢量场 vec_x = -(float)i / row + 0.5f; vec_y = (float)j / col - 0.5f; // 数据规整 vcMag = float(sqrt(vec_x * vec_x + vec_y * vec_y)); scale = (vcMag < 0.001f) ? 0.0f : 1.0f / vcMag; vec_x *= scale; vec_y *= scale; pVectr[2*index] = vec_x; pVectr[2*index + 1] = vec_y; } } } /*------------------------------------------------------------*/ /*数据规整------------------------------------------------------------------------------------------------------------*/ void NormalizVectrs(int n_xres, int n_yres, float* pVectr) { for(int j = 0; j < n_yres; j++) { for(int i = 0; i< n_xres; i++) { int index = (j * n_xres + i) << 1; float vcMag = float( sqrt( double(pVectr[index] * pVectr[index] + pVectr[index + 1] * pVectr[index + 1]) ) ); float scale = (vcMag == 0.0f) ? 0.0f : 1.0f / vcMag; pVectr[index ] *= scale;//矢量分量的放大倍数,越大,速度越大,程序运行速度会减慢,但效果会更清晰 pVectr[index + 1] *= scale; }//for }//for } /*--------------------------------------------------------------------------------------------------------------------*/ /*生成白噪声----------------------------------------------------*/ void MakeWhiteNoise(int n_xres, int n_yres, unsigned char* pNoise) { for(int j = 0; j < n_yres; j++) { for(int i = 0; i< n_xres; i++) { int r = rand(); r = ( (r & 0xff) + ( (r & 0xff00) >> 8 ) ) & 0xff;// pNoise[j * n_xres + i] = (unsigned char) r; } } } /*--------------------------------------------------------------*/ /*卷积核LUTsiz = DISCRETE_FILTER_SIZE ----------------------*/ void GenBoxFiltrLUT(int LUTsiz, float* p_LUT0, float* p_LUT1) { for(int i = 0; i < LUTsiz; i++) { p_LUT0[i] = p_LUT1[i] = (float)i; } } /*----------------------------------------------------------*/ /*写文件----------------------------------------------------------------------*/ void WriteImage2PPM(int n_xres, int n_yres, unsigned char* pImage, char* f_name) { FILE* o_file; if( (o_file = fopen(f_name, "w") ) == NULL ) { printf("Can't open output file\n"); return; } fprintf(o_file, "P6\n%d %d\n255\n", n_xres, n_yres); for(int j = 0; j < n_yres; j++) { for(int i = 0; i< n_xres; i++) { unsigned char unchar = pImage[j * n_xres + i]; fprintf(o_file, "%c%c%c", unchar, unchar, unchar); } } fclose(o_file); o_file = NULL; } /*-----------------------------------------------------------------------------*/ /*计算像素点------------------------------------------------------------------------------------------------*/ void FlowImagingLIC(int n_xres, int n_yres, float* pVectr, unsigned char* pNoise, unsigned char* pImage, float* p_LUT0, float* p_LUT1, float krnlen) { int vec_id = 0; int advDir = 0; //方向 int advcts = 0; //追踪的步数 int ADVCTS = int(krnlen * 3);//追踪的最大步数 float vctr_x = 0; //速度x分量 float vctr_y = 0; //速度y分量 float clp0_x = 0; //当前点x坐标 float clp0_y = 0; //当前点y坐标 float clp1_x = 0; //下一点x坐标 float clp1_y = 0; //下一点y坐标 float samp_x = 0; //采样点x坐标 float samp_y = 0; //采样点y坐标 float tmpLen = 0; //临时长度 float segLen = 0; //每段长度 float curLen = 0; //当前的流线长度 float prvLen = 0; //上一条流线长度 float W_ACUM = 0; //计算权重之和 float texVal = 0; //纹理的灰度值 float smpWgt = 0; //当前采样点的权重值 float t_acum[2]; //输入纹理对应流线上的灰度值之和 float w_acum[2]; //权重之和 float* wgtLUT = NULL;//权重查找表 float len2ID = (DISCRETE_FILTER_SIZE - 1) / krnlen;//将曲线长度映射到卷积核的某一项 //krnlen等于LOWPASS_FILTR_LENGTH for(int j = 0; j < n_yres; j++) { for(int i = 0; i < n_xres; i++) { t_acum[0] = t_acum[1] = w_acum[0] = w_acum[1] = 0.0f; //追踪方向,正向流线与反向流线 for(advDir = 0; advDir < 2; advDir++) { //**初始化追踪步数、追踪长度、种子点位置 advcts = 0; curLen = 0.0f; clp0_x = i + 0.5f; clp0_y = j + 0.5f; //**获取相应的卷积核 wgtLUT = (advDir == 0) ? p_LUT0 : p_LUT1; //**循环终止条件:流线追踪的足够长或者到达了涡流的中心 while(curLen < krnlen && advcts < ADVCTS) { //**获得采样点的矢量数据 vec_id = ( int(clp0_y) * n_xres + int(clp0_x) ) << 1; vctr_x = pVectr[vec_id ]; vctr_y = pVectr[vec_id + 1]; //**若为关键点即一般情况下为涡流的中心时,跳出本次追踪 if( vctr_x == 0 && vctr_y == 0) { t_acum[advDir] = (advcts == 0) ? 0.0f : t_acum[advDir]; w_acum[advDir] = (advcts == 0) ? 1.0f : w_acum[advDir]; break; } //**正向追踪或反向追踪 vctr_x = (advDir == 0) ? vctr_x : -vctr_x; vctr_y = (advDir == 0) ? vctr_y : -vctr_y; segLen = LINE_SQUARE_CLIP_MAX; segLen = (vctr_x < -VECTOR_COMPONENT_MIN) ? ( int( clp0_x ) - clp0_x ) / vctr_x : segLen; segLen = (vctr_x > VECTOR_COMPONENT_MIN) ? ( int( int(clp0_x) + 1.5f ) - clp0_x ) / vctr_x : segLen; segLen = (vctr_y < -VECTOR_COMPONENT_MIN) ? ( ( (tmpLen = ( int( clp0_y ) - clp0_y ) / vctr_y) < segLen) ? tmpLen : segLen) : segLen; segLen = (vctr_y > VECTOR_COMPONENT_MIN) ? ( ( (tmpLen = ( int( int(clp0_y) + 1.5f ) - clp0_y ) / vctr_y) < segLen) ? tmpLen : segLen) : segLen; prvLen = curLen; curLen += segLen; segLen += 0.0004f;//如何不增加的话,还是会出现问题 //**判断长度 segLen = (curLen > krnlen) ? ( (curLen = krnlen) - prvLen ) : segLen; //**获取下一个追踪点位置 clp1_x = clp0_x + vctr_x * segLen; clp1_y = clp0_y + vctr_y * segLen; //**计算采样点位置 samp_x = (clp0_x + clp1_x) * 0.5f; samp_y = (clp0_y + clp1_y) * 0.5f; ///获取纹理采样点的灰度值->这里如果采用插值的话或者效果应该又是另一个样子 texVal = pNoise[ int(samp_y) * n_xres + int(samp_x) ]; W_ACUM = wgtLUT[ int(curLen * len2ID) ]; smpWgt = W_ACUM - w_acum[advDir]; w_acum[advDir] = W_ACUM; t_acum[advDir] += texVal * smpWgt; advcts ++; clp0_x = clp1_x; clp0_y = clp1_y; if( clp0_x < 0.0f || clp0_x >= n_xres || clp0_y < 0.0f || clp0_y >= n_yres) { break; } }//while }//for texVal = (t_acum[0] + t_acum[1]) / (w_acum[0] + w_acum[1]); texVal = (texVal < 0.0f) ? 0.0f : texVal; texVal = (texVal > 255.0f) ? 255.0f : texVal; pImage[j * n_xres + i] = (unsigned char)texVal; }//for }//for } /*----------------------------------------------------------------------------------------------------------*/

求神经网络算法MATLAB代码

目标是:将表中13个样本,属性为4的数据分为两类,用神经网络算法如何用MATLAB如何做,并计算准确率。目标表格如下: 样本数 分类结果 s1 1 s2 1 s3 1 s4 1 s5 1 s6 0 s7 1 s8 1 s9 0 s10 1 s11 0 s12 1 s13 0 训练样本数据如下: v1 v2 v3 v4 s1 0.7511273 0.776725367 0.8003134 0.820134233 s2 0.714120133 0.742052267 0.7680412 0.790078867 s3 0.645714933 0.6715376 0.695278467 0.715087033 s4 0.7472154 0.778320767 0.807289833 0.832031567 s5 0.675175267 0.6936587 0.710464567 0.724201833 s6 0.6500577 0.6717081 0.6914599 0.707798567 s7 0.593231533 0.61752 0.639873433 0.658526333 s8 0.641064333 0.663005767 0.683036433 0.6995567 s9 0.567699267 0.5920724 0.614508133 0.6331918 s10 0.584882867 0.607799233 0.628835833 0.6462888 s11 0.623362867 0.651357567 0.677329233 0.699399733 s12 0.658756167 0.685911967 0.711035633 0.732209 s13 0.5843791 0.609845067 0.633467167 0.653468933

我有用matlab进行fastICA的程序,但是看不懂,求大神指导。

因为要做毕业设计,真心不会用matlab,希望有熟悉matlab的人指导,或者需要这个程序的人,可以共享。

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

讲一讲什么是Java内存模型 Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到。但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着。 这是一个比较开放的题目,面试官主要想考察的是对Java内存模型的了解到了什么程度了,然后根据回答进行进一步的提问 下面,我们就这个问题的回答列一下我们的思路 具体的思路如下: 说一说Java内存模型的缘由 简略辨析...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐