稀疏表示字典的显示【MATLAB实现】
本文主要是实现论文--基于稀疏表示的图像超分辨率《Image Super-Resolution Via Sparse Representation》中的Figure2,通过对100000个高分辨率和低分辨率图像块训练得到的高分辨率图像块字典,字典原子总数为512,图像块尺寸大小为9X9
方法一:
- clc;
- clear all;
- % load dictionary
- load('Dictionary/D_512_0.15_9.mat');
- patch_size=9;
- nRow=24;
- nCol=22;
- D=Dh';
- w=nCol*patch_size;
- h=nRow*patch_size;
- gridx = 1:patch_size :w;
- gridx = [gridx, w-patch_size+1];
- gridy = 1:patch_size : h;
- gridy = [gridy, h-patch_size+1];
- K=512; %字典原子总数
- DD=cell(1,K);
- row=length(gridx);
- col=length(gridy);
- hIm=zeros([w,h]);
- for i=1:K
- DD{i}=D(i,:);
- end
- for ii = 1:length(gridx),
- for jj = 1:length(gridy),
- yy = gridx(ii);
- xx = gridy(jj);
- if (ii-1)*nRow+jj >K
- break
- end
- temp=DD{(ii-1)*nCol+jj};
- hPatch=reshape(temp,[patch_size,patch_size]);
- hIm(yy:yy+patch_size-1, xx:xx+patch_size-1) = hIm(yy:yy+patch_size-1, xx:xx+patch_size-1) +hPatch;
- end
- end
- figure;
- imagesc(hIm);
- colormap(gray);
- axis image;
输出结果:
可以看出,相比于论文中字典的显示图,颜色有点浅,通过调节MATLAB的colorbar,可以将背景颜色变深,
结果如下图所示:
方法二:
通过http://www.cs.technion.ac.il/~elad/software/提供的ksvd工具箱中的displayDictionaryElementsAsImage( )函数,来实现字典的显示。
displayDictionaryElementsAsImage.m
- function I = displayDictionaryElementsAsImage2(D, numRows, numCols,X,Y,sortVarFlag)
- % function I = displayDictionaryElementsAsImage(D, numRows, numCols, X,Y)
- % displays the dictionary atoms as blocks. For activation, the dictionary D
- % should be given, as also the number of rows (numRows) and columns
- % (numCols) for the atoms to be displayed. X and Y are the dimensions of
- % each atom.
- borderSize = 1;
- columnScanFlag = 1;
- strechEachVecFlag = 1;
- showImFlag = 1;
- if (length(who('X'))==0)
- X = 8;
- Y = 8;
- end
- if (length(who('sortVarFlag'))==0)
- sortVarFlag = 1;
- end
- numElems = size(D,2);
- if (length(who('numRows'))==0)
- numRows = floor(sqrt(numElems));
- numCols = numRows;
- end
- if (length(who('strechEachVecFlag'))==0)
- strechEachVecFlag = 0;
- end
- if (length(who('showImFlag'))==0)
- showImFlag = 1;
- end
- %%% sort the elements, if necessary.
- %%% construct the image to display (I)
- sizeForEachImage = sqrt(size(D,1))+borderSize;
- I = zeros(sizeForEachImage*numRows+borderSize,sizeForEachImage*numCols+borderSize,3);
- %%% fill all this image in blue
- I(:,:,1) = 1; %min(min(D));
- I(:,:,2) = 1; %min(min(D));
- I(:,:,3) = 1; %max(max(D));
- % %%% fill all this image in blue
- % I(:,:,1) = 0; %min(min(D));
- % I(:,:,2) = 0; %min(min(D));
- % I(:,:,3) = 1; %max(max(D));
- %%% now fill the image squares with the elements (in row scan or column
- %%% scan).
- if (strechEachVecFlag)
- for counter = 1:size(D,2)
- D(:,counter) = D(:,counter)-min(D(:,counter));
- if (max(D(:,counter)))
- D(:,counter) = D(:,counter)./max(D(:,counter));
- end
- end
- end
- if (sortVarFlag)
- vars = var(D);
- [V,indices] = sort(vars');
- indices = fliplr(indices);
- D = [D(:,1:sortVarFlag-1),D(:,indices+sortVarFlag-1)];
- signs = sign(D(1,:));
- signs(find(signs==0)) = 1;
- D = D.*repmat(signs,size(D,1),1);
- D = D(:,1:numRows*numCols);
- end
- counter=1;
- for j = 1:numRows
- for i = 1:numCols
- % if (strechEachVecFlag)
- % D(:,counter) = D(:,counter)-min(D(:,counter));
- % D(:,counter) = D(:,counter)./max(D(:,counter));
- % end
- % if (columnScanFlag==1)
- % I(borderSize+(i-1)*sizeForEachImage+1:i*sizeForEachImage,borderSize+(j-1)*sizeForEachImage+1:j*sizeForEachImage,1)=reshape(D(:,counter),8,8);
- % I(borderSize+(i-1)*sizeForEachImage+1:i*sizeForEachImage,borderSize+(j-1)*sizeForEachImage+1:j*sizeForEachImage,2)=reshape(D(:,counter),8,8);
- % I(borderSize+(i-1)*sizeForEachImage+1:i*sizeForEachImage,borderSize+(j-1)*sizeForEachImage+1:j*sizeForEachImage,3)=reshape(D(:,counter),8,8);
- % else
- % Go in Column Scan:
- I(borderSize+(j-1)*sizeForEachImage+1:j*sizeForEachImage,borderSize+(i-1)*sizeForEachImage+1:i*sizeForEachImage,1)=reshape(D(:,counter),X,Y);
- I(borderSize+(j-1)*sizeForEachImage+1:j*sizeForEachImage,borderSize+(i-1)*sizeForEachImage+1:i*sizeForEachImage,2)=reshape(D(:,counter),X,Y);
- I(borderSize+(j-1)*sizeForEachImage+1:j*sizeForEachImage,borderSize+(i-1)*sizeForEachImage+1:i*sizeForEachImage,3)=reshape(D(:,counter),X,Y);
- % end
- counter = counter+1;
- end
- end
- if (showImFlag)
- I = I-min(min(min(I)));
- I = I./max(max(max(I)));
- imshow(I,[]);
- end
测试程序
displayDictionary_test.m
- clc;
- clear all;
- %加载字典
- load('F:\Research\ScSR\ScSR\Dictionary\D_512_0.15_9.mat');
- patch_size=9;
- D=Dh;
- K=512;
- figure;
- %调用KSVD工具箱中的字典显示函数
- im=displayDictionaryElementsAsImage(D, floor(sqrt(K)), floor(size(D,2)/floor(sqrt(K))),patch_size,patch_size);
输出结果:
方法三:
因为方法一显示的字典图像偏灰,对比度不强,所以通过对字典原子像素值进行拉伸变化到0-1,增强图像对比度。
- clc;
- clear all;
- % load dictionary
- load('Dictionary/D_512_0.15_9.mat');
- patch_size=9;
- nRow=24;
- nCol=22;
- D=Dh';
- w=nCol*patch_size;
- h=nRow*patch_size;
- gridx = 1:patch_size :w;
- gridx = [gridx, w-patch_size+1];
- gridy = 1:patch_size : h;
- gridy = [gridy, h-patch_size+1];
- K=512; %字典原子总数
- DD=cell(1,K);
- row=length(gridx);
- col=length(gridy);
- hIm=zeros([w,h]);
- for i=1:K
- DD{i}=D(i,:);
- end
- for ii = 1:length(gridx),
- for jj = 1:length(gridy),
- yy = gridx(ii);
- xx = gridy(jj);
- if (ii-1)*nRow+jj >K
- break
- end
- temp=DD{(ii-1)*nCol+jj};
- hPatch=reshape(temp,[patch_size,patch_size]);
- I=hPatch;
- I = I-min(min(min(I)));
- I = I./max(max(max(I)));%对字典原子像素值进行拉伸变化到0-1
- hIm(yy:yy+patch_size-1, xx:xx+patch_size-1) = hIm(yy:yy+patch_size-1, xx:xx+patch_size-1) +I;
- end
- end
- figure;
- imshow(hIm);
调整参数,将字典原子像素值拉伸变换到0-0.7
- hPatch=reshape(temp,[patch_size,patch_size]);
- I=hPatch;
- I = I-min(min(min(I)));
- I = 0.7*I./max(max(max(I)));%对字典原子像素值进行拉伸变化到0-0.7
稀疏表示字典的显示【MATLAB实现】相关推荐
- 稀疏表示字典的显示(MATLAB实现代码)
本文主要是实现论文--基于稀疏表示的图像超分辨率<Image Super-Resolution Via Sparse Representation>中的Figure2.通过对100000个 ...
- 判别性的低秩字典学习代码matlab,基于分类的判别性字典学习的稀疏编码算法研究...
第1章绪论1.1课题研究的背景及意义计算机视觉一直是人类视觉研究中的一项非常热门的领域.计算机视觉研究的目的是为了让计算机能够利用图像和图像序列来识别和感知周围的世界,以帮助人们在复杂的情况下解决未知 ...
- windows 下 putty 登陆服务器 显示matlab图形界面
本文需要下载 putty.exe 和 pscp.exe :http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html Xming 主 ...
- matlab只显示y一部分,突出显示matlab图的部分内容
我有一个matlab图,看起来像这样: 其中每个子图的Y值存储在单维数组中.我想要做的是找到一个顶部图形高于某个高度的区域,如0.5.我还想在其他图表中突出显示相同的区域. 这是我正在谈论的一个例子: ...
- 稀疏表示 河流多元信息处理 matlab
稀疏表示河流多元信息处理 前言 具体步骤和结果 一.简要介绍多源数据稀疏表示 1)稀疏表示: 2)稀疏表示在多源信息中的应用: 二.四个源头的比重 1) 构建字典 2)计算系数矩阵 3)加权后的距离 ...
- 【图像融合】基于稀疏表示多光谱图像融合含Matlab源码
1 简介 高分辨率的多光谱图像应用广泛,比如变化监测,目标识别,场景解译.通常,商用光学卫星能够同时提供高空间分辨率的全色图像和低分辨率的多光谱图像.物理条件的限制使得单一传感器无法获得高质量的多光谱 ...
- plot绘图只能在工具栏的预览显示,无法全屏弹窗显示---matlab 不学无术小问题
背景:小白在使用他人源码时,对MATLAB中的函数不熟悉,运行成功后发现plot绘图无法直接弹窗显示,只能在工具栏的预览显示. 为了解决此问题对绘图部分所有函数都进行了仔细调试,终于发现问题出在set ...
- matlab eval 不显示,matlab中 eval(command); 运算符无效的问题
下面这个程序是haar-like特征提取-->haar-like关键点显示-->haar-like特征人脸检测代码,该段代码在运行时出现了如图片所示的bug,本人看不懂这个bug出错的根源 ...
- matlab相位连续显示,matlab设计复合信号不同频率的初相位
生成原始信号 为了方便起见,生成一个包含三个频率的复信号,分别是5Hz.10Hz.15Hz,初相位分别为 采样率取100,采样点取512个,代码如下. clc;clear; Fs =100;%采样率 ...
最新文章
- win2003禁止web等目录执行exe,bat,com的方法
- Pandas-层次化索引
- Linux 学习记录 二 (文件的打包压缩).
- matlab彩色图像变暗
- 微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github...
- JAVA JDK 、Maven、IDEA安装
- 经典:趣解什么叫网关?
- js高级学习笔记(b站尚硅谷)-16-原型链的继承
- OPNET14.5+WIN10+VS2010安装教程(附安装包)
- web前端设计--二级菜单栏
- 《第一行代码Android(第3版)》— Android 书籍
- 51单片机:点亮LED灯
- java web pring log4j_springmvc之log4j
- 嵌入式监控【v4l2采集-vpu编码-live555推流】
- C语言|博客作业09
- vue添加axios及页面的导航、搜索、分页
- JavaScript弹出模式窗口
- 笔记本WIN7建立共享wifi的简单方法
- 产品基础能力研习:CRM系统
- 爬虫练习-爬取笔趣阁小说