我已经创建了一个程序的工作,该程序接收硬币的图像,然后最大限度地利用Matlab的能力绘制出来(下面的示例)。有了这个程序,我想尝试图像处理,类似于Google图像允许用户搜索图像并返回它认为相似的结果。
Application Image | Further Application Image Example
为此,我需要大量数据来完成此操作并手动使用我的应用程序上的滑块并为每个图像生成50-100个结果将花费太长时间。所以我决定创建一个新的按钮,生成100个结果,每个结果提供一个不同的绘制样本。
function slider2_Callback(hObject, eventdata, handles)
% hObject handle to slider2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
global coins_gray;
global num;
val=0.5*get(hObject,'Value')-0.5; %Adjusts the intensity of the slider's brightness setting
imbrightness = coins_gray+val;
axes(handles.axes3);
imshow(imbrightness);
title('Altered Coin Image', 'fontweight', 'bold');
[~, threshold] = edge(imbrightness, 'Canny');
fudgeFactor = num;
img_edge = edge(imbrightness, 'Canny', threshold * fudgeFactor);
axes(handles.axes4)
imshow(img_edge);
title('User Drawn Image', 'fontweight', 'bold');
上面说明了滑块的工作原理,但我不知道如何使其自动调整,就像我提到的那样。
function gatherbutton_Callback(hObject, eventdata, handles)
% hObject handle to gatherbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Prompts the user to enter a title for the image gathering process
prompt = ('Please Enter The Image Name (Do Not Include File Extension): ');
userInput = input(prompt, 's');
counter = 0
while counter < 100:
processFolder = sprintf('M:/Project/MatLab/Coin Image Processing/Image Processing/%s_%s.jpg', userInput, counter);
referenceImagePrep = getframe(handles.axes3);
drawnImagePrep = getframe(handles.axes4);
counter = counter + 1;
end
这是我到目前为止所拥有的。因此循环应运行100次,每次运行时,新映像将保存到给定目录中,并应继续运行直到while循环完成。那么我现在如何调整while循环以自动更改参考图像的亮度,然后将该图像存储到给定的文件夹中。
答案 0 :(得分:0)
您的问题有一个相对简单的解决方案 我不能承认你的代码在应用后会完美运作......
slider2
的{{1}}循环中设置while
值。 gatherbutton_Callback
(模拟用户滑动)。 slider2_Callback
命令以刷新GUI。 以下是修改后的drawnow
循环:
while
很少有建议:
while counter < 100:
%1. Set slider value.
set(handles.slider2, 'Value', counter/100);
%2. Call `slider2_Callback` (simulate user sliding).
slider2_Callback(handles.slider2, eventdata, handles);
%3. Call drawnow for refreshing the GUI.
drawnow
processFolder = sprintf('M:/Project/MatLab/Coin Image Processing/Image Processing/%s_%s.jpg', userInput, counter);
referenceImagePrep = getframe(handles.axes3);
drawnImagePrep = getframe(handles.axes4);
%Save image to file...
counter = counter + 1;
end
循环代替for
循环(在您的情况下更优雅):while
。 for counter = 0:99
替换为getframe
(更好地处理图像而不是帧)。 getimage
或tif
格式保存图像(png
格式会创建有损图像压缩工件)。 jpg
功能保存图像。